当您在客户端禁用网络连接时,CSocket不会收到OnClose或OnReceive

时间:2009-12-15 16:26:51

标签: c++ sockets asyncsocket

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

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

更新:我刚测试过,看到客户端也没有收到OnClose!我在运行客户端的窗口上禁用了互联网连接!

1 个答案:

答案 0 :(得分:1)

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