0

我用 c++ CSocket 创建了一个客户端服务器应用程序。当我将客户端连接到服务器,然后我使用普通 X 按钮关闭客户端或使用 taskmanager 结束任务时,服务器 CSocket 收到 OnClose 事件。问题是当我在运行客户端的 Windows 上禁用 Internet 连接时,服务器 CSocket 没有收到 OnClose 或 OnReceive 事件!

有人可能知道发生了什么吗?

更新:我刚刚测试过,发现客户也没有收到 OnClose!我在运行客户端的 Windows 上禁用了 Internet 连接!

4

1 回答 1

1

客户端关闭,无法通过 FIN 或 RST 关闭与服务器的连接。为了让服务器检测到客户端已死,它必须要么有数据要发送(这将失败),要么必须发送周期性的 TCP 保持活动探测。 TCP_KEEPALIVE可以设置为套接字选项。

于 2009-12-15T16:37:53.133 回答