boost::asio
サーバー/クライアント アプリケーションに使用しています。サーバーは一度に 1 つの接続のみを受け入れます。クライアントがまだ接続されているかどうかをサーバーが確認するための最良の方法は何だろうと思っています。
これの目的は、クライアントがクラッシュしたかどうかを知りたいので、新しい接続試行のリッスンを再開できるようにすることです。
boost::asio
サーバー/クライアント アプリケーションに使用しています。サーバーは一度に 1 つの接続のみを受け入れます。クライアントがまだ接続されているかどうかをサーバーが確認するための最良の方法は何だろうと思っています。
これの目的は、クライアントがクラッシュしたかどうかを知りたいので、新しい接続試行のリッスンを再開できるようにすることです。
私のアプリケーションでは、次のフラグを使用しており、クライアントが切断されたときに読み取りが出ます。用途に合わせて是非お試しください。接続直後にこのフラグを適用します。
私の場合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));