7

boost::asioサーバー/クライアント アプリケーションに使用しています。サーバーは一度に 1 つの接続のみを受け入れます。クライアントがまだ接続されているかどうかをサーバーが確認するための最良の方法は何だろうと思っています。

これの目的は、クライアントがクラッシュしたかどうかを知りたいので、新しい接続試行のリッスンを再開できるようにすることです。

4

2 に答える 2

6

私のアプリケーションでは、次のフラグを使用しており、クライアントが切断されたときに読み取りが出ます。用途に合わせて是非お試しください。接続直後にこのフラグを適用します。

私の場合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));
于 2013-06-01T12:15:35.903 に答える