Boost ASIO:服务器如何知道客户端是否仍然连接?

Sma*_*ash 6 c++ tcp boost-asio

我boost::asio用于服务器/客户端应用程序.服务器一次只接受一个连接.我想知道服务器验证客户端是否仍然连接的最佳方法是什么.

这样做的目的是,我希望能够知道客户端是否已崩溃,以便我可以重新开始侦听新的连接尝试.

Chi*_*sai 5

在我的应用程序中,我使用以下标志,并且当客户端断开连接时,我的读取结果出来。如果在您的应用程序中请尝试。连接后立即应用此标志。

就我而言skt_TCP是类型boost::asio::ip::tcp::socket

int32_t accept_server_socket = skt_TCP.native_handle();

int32_t timeout = 8;
int32_t cnt = 2;
int32_t intverval = 2;

// Added Keepalive flag
boost::asio::socket_base::keep_alive opt_keep_alive(true);
skt_TCP.set_option(opt_keep_alive);
setsockopt(accept_server_socket, SOL_TCP, TCP_KEEPIDLE, &timeout, sizeof(timeout));
setsockopt(accept_server_socket, SOL_TCP, TCP_KEEPCNT, &cnt, sizeof(cnt));
setsockopt(accept_server_socket, SOL_TCP, TCP_KEEPINTVL, &intverval, sizeof(intverval));
Run Code Online (Sandbox Code Playgroud)