【发布时间】:2015-03-14 05:58:12
【问题描述】:
我有许多 C 程序在 Linux 主机 (RHEL 6.6) 上运行。它们与同一主机上的其他应用程序有 TCP/IP 连接。每个连接上的流量很少。每隔一段时间,对同一主机上进程的其中一个套接字的 read() 调用返回 0。这些套接字通常在应用程序的生命周期内保持不变,因此在正常操作期间它们不会完全关闭。我希望如果发生错误,例如另一端崩溃,read() 将返回 -1 并设置 errno。
所以,问题是 - 除了 TCP/IP 连接被另一端干净地关闭(shutdown(fd); close(fd))之外,还有什么原因会导致 read() 调用返回 0?
read() 的手册页声明 0 仅在 EOF 时返回,而 recv() 手册页声明它返回“当对等方已执行有序关闭时返回 0”。我假设 read() 和 recv() 的返回是等效的,并且 TCP/IP 连接上的 EOF 意味着完全关闭。
【问题讨论】: