boost ライブラリを使用してサーバー アプリケーションを作成しています。一度に 1 つのクライアントが許可されるため、async_accept(...) 関数が呼び出されると、アクセプターは閉じられます。
私のサーバーの唯一の仕事は、定期的にデータを送信することです(サーバーで送信が有効になっている場合、そうでない場合は有効になるまで「そこに座ってください」)。したがって、ブースト メッセージ キューがあります。メッセージが到着すると、send() がソケットで呼び出されます。
私の問題は、クライアントがまだリッスンしているかどうかがわからないことです。通常は気にしませんが、次の送信までに送信でエラーが発生します。
しかし、私の場合、ソケットが開かれたときにアクセプターは開かれません。ソケットが CLOSE_WAIT 状態になった場合、クライアントが再び接続できるように、ソケットを閉じてアクセプターを再度開く必要があります。
送信が無効になっている可能性があるため、次の送信まで待つこともできません。サーバーが動かなくなる可能性があります。
質問: boost::asio::ip::tcp::socket が CLOSE_WAIT 状態にあるかどうかを判断するにはどうすればよいですか?