我正在尝试升级我的 C++ TCP 客户端程序以与 Windows 7 兼容。该程序设置为使用非阻塞套接字,它适用于 Windows XP。但是,当我在 Windows 7 中运行相同的代码并发现套接字类中的 recv 函数的行为不同时。
当我尝试从 PC 断开以太网电缆时,Windows XP 和 Windows 7 都检测到系统托盘中的网络已断开连接。然而,
在 Windows XP 中,recv 返回 SOCKET_ERROR 并且 WSAGetLastError 返回 WSAECONNRESET
在 Windows 7 中,recv 返回 SOCKET_ERROR 但 WSAGetLastError 返回 WSAEWOULDBLOCK
我很好奇为什么socket recv 函数仍然认为socket 仍然连接(即返回WSAEWOULDBLOCK)并且只检测到keepalive 超时后断开连接。
除了在调用 recv 函数后检查 WSAGetLastError 的值之外,还有其他方法可以使用 TCP 套接字库检测网络是否断开?
非常感谢!