我已经使用 C++ CSocket 创建了一个客户端服务器应用程序。当我将客户端连接到服务器,然后使用普通 X 按钮关闭客户端或使用 taskmanager 结束任务时,服务器 CSocket 收到 OnClose 事件。问题是当我在运行客户端的 Windows 上禁用互联网连接时,服务器 CSocket 没有收到 OnClose 或 OnReceive 事件!
有人可能知道发生了什么事吗?
更新:我刚刚测试发现客户端也没有收到 OnClose!我在运行客户端的 Windows 上禁用了互联网连接!
最佳答案
客户端已关闭,但无法通过 FIN 或 RST 关闭与服务器的连接。为了让服务器检测到客户端已死,它必须有数据要发送(这会失败)或者必须定期发送 TCP keepalive 探测。 TCP_KEEPALIVE
可以设置为套接字选项。
关于c++ - 当您在客户端禁用网络连接时,CSocket 不接收 OnClose 或 OnReceive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1908634/