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

4
当我运行lsof时,我看到许多条目显示为TCP <HOST>:<PORT> -> <IP>:https (CLOSED)
这是一个标记,表示描述符曾经存在,还是打开的文件仍然存在?
假设这不是标记,为什么文件描述符仍然存在?
等待几分钟后,CLOSED 条目仍然显示在输出中。只有当进程退出时,我才看到它们消失。
1个回答

6
(CLOSED)这个标记表示TCP连接处于关闭状态(已经被关闭),很可能是由于远程端关闭了连接。lsof列出文件描述符的事实意味着该文件描述符仍然打开,引用已关闭的TCP连接。没有文件存在,只有套接字的本地端还在。
文件描述符将持续存在,直到进程关闭它,这可以通过close系统调用来完成,或者在进程退出时自动发生。
关闭文件描述符和关闭连接只是间接相关的。当您关闭文件描述符时,如果它是连接一端的最后一个引用,则连接将关闭(如果它尚未关闭--通过另一端关闭或通过使用shutdown系统调用显式关闭)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接