1

因此,想象一下客户端从套接字读取并读取返回 0 的情况。这意味着 EOF 或服务器已关闭连接。

客户端是否也应该在这个文件描述符上调用 close ?如果客户端不调用 close 是否会导致某些文件描述符泄漏?

4

1 回答 1

2

是的,您仍然需要关闭它。即使远程主机已关闭连接,该句柄仍存在于您的机器上。

您仍然可以引用套接字(在其上调用各种方法,包括read()即使连接本身已关闭。在您调用句柄后close(),句柄已完全消失,因此调用方法比简单地返回 0 更有可能导致分段错误。

要清楚。呼叫close()有两个动作。

  1. 它发送适当的数据包以告诉远程主机套接字已关闭。
  2. 它清理与该套接字关联的内存。

因此,即使远程主机关闭了套接字,您仍然需要 close 来清理内存。

于 2013-05-01T15:30:42.003 回答