我正在使用boost::asio
作为服务器/客户端应用程序。服务器一次只接受一个连接。我想知道服务器验证客户端是否仍然连接的最佳方法是什么。
这样做的目的是,我希望能够知道客户端是否已崩溃,以便我可以重新开始侦听新的连接尝试。
答案 0 :(得分:4)
在我的应用程序中,我使用以下标志,当客户端断开连接时,我的读取就会出现。 如果它在您的申请中,请尝试。连接后立即应用此标志。
在我的情况下,{p>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));