当您在客户端禁用网络连接时,CSocket 不会收到 OnClose 或 OnReceive
我使用 C++ CSocket 创建了一个客户端服务器应用程序。当我将客户端连接到服务器,然后使用普通 X 按钮关闭客户端或使用 taskmanager 结束任务时,服务器 CSocket 会收到 OnClose 事件。问题是当我在客户端运行的 Windows 上禁用互联网连接时,服务器 CSocket 不会收到 OnClose 或 OnReceive 事件!
有人可能知道发生了什么事吗?
更新:我刚刚测试并发现客户端也没有收到 OnClose!我在运行客户端的 Windows 上禁用了互联网连接!
I've created a client server application with c++ CSocket. when I connect the client to the server and after that I close the client with normal X button or end task it with taskmanager , server CSocket receives the OnClose event. The problem is when I disable the internet connection on windows that the client is running on, server CSocket doesn't receive the OnClose nor OnReceive event!
Is anyone possibly know what's going on?
Update: I've just tested and saw that client didn't recieve the OnClose too! I disabled the internet connection on the windows that the client is running on!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
客户端关闭后无法通过 FIN 或 RST 关闭与服务器的连接。为了让服务器检测到客户端已死亡,它必须有数据要发送(这会失败)或者必须发送定期的 TCP keepalive 探测。
TCP_KEEPALIVE
可以设置为套接字选项。The client side is shutdown without being able to close the connection to the server via a FIN or RST. For the server to detect that the client is dead it must either have data to send (which would fail) or must send periodic TCP keepalive probes.
TCP_KEEPALIVE
can be set as a socket option.