【发布时间】:2014-11-18 16:56:29
【问题描述】:
我正在编写 TCP 客户端,我想在连接中断时立即重新连接(即服务器重新启动)。我想尽快重新启动连接,即使没有数据可以通过这个套接字发送。我在 netstat 中看到连接处于 CLOSE_WAIT 状态,但 select、getsockopt 或 getpeername 没有错误。 我知道我可以尝试向socket写一些东西,但是这个连接只是为了读取。
【问题讨论】:
我正在编写 TCP 客户端,我想在连接中断时立即重新连接(即服务器重新启动)。我想尽快重新启动连接,即使没有数据可以通过这个套接字发送。我在 netstat 中看到连接处于 CLOSE_WAIT 状态,但 select、getsockopt 或 getpeername 没有错误。 我知道我可以尝试向socket写一些东西,但是这个连接只是为了读取。
【问题讨论】:
来自man recv:
返回值
这些调用返回接收到的字节数,如果发生错误,则返回 -1。当对端执行有序关闭时,返回值为 0。
【讨论】:
CLOSE_WAIT 表示从对等方收到FIN。这将导致select() 报告套接字是可读的,然后recv() 将返回 0。这就是手册页所指的“有序关闭”。