私はうまく動作するクライアントサーバーアプリケーションを持っています。 クライアントがソケット閉じた後に、サーバーにいくつかのメッセージを送信します(呼び出しのシャットダウンとソケットのクローズを())クライアントがいつソケットを閉じたかを知るために、asioサーバーをブーストしてください。
データを読み取るコードのサーバー側は以下の通りです:
while (1)
{
try
{
int headerBytesReceived = asio::read(*sock.get(), boost::asio::buffer(inbound_header_));
std::cout << "headerBytesReceived : " << headerBytesReceived << "\n" << std::flush;
//.......
//.......
}
catch (system::system_error &e)
{
std::cout << "Server Error occured! Error code = "
<< e.code() << ". Message: "
<< e.what() << "\n";
break;
}
}
サーバーは、スレッド内のデータを無限ループで読み取ります。 クライアントがソケットを閉じると、ループから優雅に抜け出したいと思います。 今すぐクライアントがメッセージの送信を完了し、ソケットを閉じると、次のエラーでキャッチが呼び出されます。
サーバーエラーが発生しました。エラーコード= asio.misc:2。メッセージ:read:ファイルの最後
接続が閉じられてループを解除する必要があるというキャッチ内のより良い方法がありますか?エラーコードをチェックすることによって? もちろん、私はcoutステートメントを削除することができますが、エラーの内容を記録目的で知りたいと思っています。