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

标签 c++ sockets asyncsocket

我已经使用 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/

相关文章:

c++ - boost::asio::async_read_some在父线程中运行

C++ 派生类型必须定义静态 constexpr

c++ - 如何在 Visual Studio 2010 中自动折叠某些注释?

c++ - 接收 std::pair 作为参数并从花括号列表初始化中推导出类型的模板化函数

iOS 客户端,C++ 服务器?

c++ - 有谁知道在 C/C++ 中使用 libevent 实现 Web 套接字 API 的任何尝试?

c# - 在每个方法中初始化一个新的套接字是一件好事吗?

c++ - QChartView、RubberBand 和鼠标右键行为

linux - Bash 中的简单套接字服务器?

Java服务器结构