Boost asio通知服务器断开连接

boost asio notify server of disconnect

本文关键字:断开 连接 服务器 通知 asio Boost      更新时间:2023-10-16

我想知道如果客户端应用程序关闭,是否有任何方法通知服务器。通常,如果我Ctrl+C我的客户端终端一个EOF信号被发送到服务器端。服务器端async_read函数有一个句柄,其中包含boost::system::error_code ec参数。当服务器端接收到EOF-signal时调用句柄,我可以愉快地处理并告诉服务器再次开始侦听。

然而,如果我尝试使用socket.shutdown()socket.close()干净地关闭我的客户端应用程序,什么也不会发生,服务器端套接字仍然打开。

我想知道,是否有一种方式以某种方式发送错误信号到服务器端套接字,以便我可以使用错误代码处理它?

注释中描述的方法涵盖了99%的情况。当客户端机器(不是优雅地)关闭或网络问题时,它无法工作。

为了获得可靠的断开连接的客户端通知,您需要实现"ping"功能:定期发送ping数据包并检查您是否收到了pong数据包