客户端退出时套接字处于 TIME_WAIT 状态,但重新启动时不会出现这种情况

客户端退出时套接字处于 TIME_WAIT 状态,但重新启动时不会出现这种情况

Linux 服务器(端口 7000)

Windows 客户端(端口 8585)

场景 1:客户端重启

  • 重启客户端

  • 服务器套接字读取返回 -1,获取 errno 104,对端重置连接

  • 服务器关闭与客户端的套接字连接

  • 客户端在其套接字上调用 close

  • 客户端重新启动并能够立即连接到服务器

场景 2:客户退出

  • 客户端退出

  • 服务器套接字读取返回 0,获取 errno 11,资源暂时不可用

  • 服务器关闭与客户端的套接字连接

  • 客户端在其套接字上调用 close

  • 客户端netstat显示

    TCP Client IP:8585 Server:7000 TIME_WAIT InHost

是什么原因导致服务器套接字读取在重新启动时返回 0,而不是返回 errno 104 的 -1?

客户端正在调用 Windows 套接字上的关机/关闭来重新启动/退出。我了解 TCP 的 TIME_WAIT 状态是什么。但我不明白是什么导致了这个 TIME_WAIT。

Wireshark 重启:服务器有 TCP [RST, ACK]

Wireshark 退出:服务器有 TCP [FIN, ACK]

不确定如果我为客户端套接字调用相同的关闭方法,它们为什么会有所不同。

相关内容