【发布时间】:2013-05-01 15:26:44
【问题描述】:
因此,想象一下客户端从套接字读取并读取返回 0 的情况。这意味着 EOF 或服务器已关闭连接。
客户端也应该在这个文件描述符上调用 close 吗?如果客户端不调用 close 是否会导致某些文件描述符泄漏?
【问题讨论】:
标签: sockets networking tcp
因此,想象一下客户端从套接字读取并读取返回 0 的情况。这意味着 EOF 或服务器已关闭连接。
客户端也应该在这个文件描述符上调用 close 吗?如果客户端不调用 close 是否会导致某些文件描述符泄漏?
【问题讨论】:
标签: sockets networking tcp
是的,您仍然需要关闭它。即使远程主机已关闭连接,该句柄仍存在于您的机器上。
即使连接本身已经关闭,你仍然可以引用套接字(调用包括read()在内的各种方法。调用close()之后,句柄已经完全消失,因此调用方法更容易造成分段错误而不是简单地返回 0。
要清楚。调用close() 有两个动作。
所以即使远程主机关闭了套接字,你仍然需要 close 来清理内存。
【讨论】:
close(),即使连接消失了。连接一直存在,直到本地应用程序或远程应用程序调用 close() 或发生其他一些超时。