unix - 为什么在 TCP 连接关闭后文件描述符仍然存在?

标签 unix tcp file-descriptor

当我运行 lsof我看到很多条目带有 TCP <HOST>:<PORT> -> <IP>:https (CLOSED) .

这是表明描述符曾经存在还是打开的文件仍然存在的标记?

假设它不是标记,为什么文件描述符仍然存在?

等待几分钟后,CLOSED条目仍显示在输出中。我只看到它们在进程退出时消失。

最佳答案

来自 lsof 的 (CLOSED) 注释告诉您 TCP 连接处于关闭状态(已关闭),可能是由于远程端关闭了连接。 lsof 列出文件描述符的事实意味着文件描述符仍处于打开状态,指的是已关闭的 TCP 连接。没有涉及的文件仍然存在,只有套接字的本地端。

文件描述符将持续存在,直到进程关闭它,这可以通过关闭系统调用发生,或者在进程退出时自动发生。

关闭文件描述符和关闭连接只是切线相关的。当您关闭文件描述符时,如果它是对连接一端的最后引用,则连接将被关闭(如果它尚未关闭 - 通过另一端关闭,或者通过显式关闭关闭系统调用)

关于unix - 为什么在 TCP 连接关闭后文件描述符仍然存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49640842/

相关文章:

linux - 如何在 LAN Linux 中创建到另一台计算机的 tcp 重定向

c - 使用写入将整数写入文件描述符?

c - 等待来自文件描述符的输入

bash - 在 bash 中比较 PID

linux - 我不明白为什么在 bash 中比较字符串时遇到问题

Python,为基于套接字的应用程序实现代理支持(不是 urllib2)

javascript - 用于低延迟网页游戏的 HTTP 或 Websocket?

c - 一旦文件描述符中没有其他内容可读取,就停止 read(2)

regex - BASH 中的 IF 语句没有达到预期的效果

linux - 使用 sed - shell 脚本将值 append 到变量