我用c ++ CSocket创建了一个客户端服务器应用程序。当我将客户端连接到服务器并在此之后我使用普通的X按钮关闭客户端或使用taskmanager结束任务时,服务器CSocket接收OnClose事件。问题是当我在运行客户端的Windows上禁用Internet连接时,服务器CSocket没有收到OnClose或OnReceive事件!
有人可能知道发生了什么吗?
更新:我刚测试过,看到客户端也没有收到OnClose!我在运行客户端的窗口上禁用了互联网连接!
答案 0 :(得分:1)
客户端关闭,无法通过FIN或RST关闭与服务器的连接。为了让服务器检测到客户端已经死了,它必须要么要发送数据(这会失败),要么必须发送定期的TCP keepalive探测器。 TCP_KEEPALIVE
可以设置为套接字选项。