WSAECONNRESET 好奇心

WSAECONNRESET 好奇心

Windows 上的 TCP 堆栈究竟如何确定连接已被强制关闭或被对端重置?

我知道 Windows 上的 TCP 默认会尝试重新传输未确认的数据包 5 次。如果 5 次尝试后仍未收到确认,会发生什么情况?它会立即在阻塞套接字上返回 WSAECONNRESET 代码吗?

另外,当我们确实收到 WSAECONNRESET 错误代码时,该 TCP 连接的实际状态是什么?

答案1

连接重置通常意味着远程主机发送了一些表示错误的消息,而不是通常会产生的无响应WSAETIMEDOUT

例如,远程主机可能会发送 ICMP“端口不可达”消息,这表明远程应用程序关闭了其端口。

此时 TCP 连接已关闭,尽管您的本地套接字可能仍有资源等待您关闭套接字。

请记住,根据所涉及的操作系统的具体版本,行为可能会有细微的差别。

相关内容