0

Boost::ASIO lib に基づいて TCP クライアントを構築しています。Boostを使用read_some()して、サーバーからの応答を読み取りました。10 秒間通信がない場合に「ping」コマンドを送信するタイムアウト ロジックを実装したいと考えています。問題は

l=_socket->read_some(boost::asio::buffer(this->reply,sizeof(this->reply)),error);

読み取りバッファに転送するデータがない場合、プログラムの実行をブロックしているようです。それで、それから抜け出す方法はありますか?データがバッファに転送されていない場合、このスレッドをスリープ状態にする必要があるため、使用したくありませんでした。これは、転送されたデータのサイズを返すため、async_read_some()簡単に実行できました。read_some()主なことは、タイムアウト中でも接続を閉じたくありませんが、サーバーが ping コマンドに応答するかどうかを確認することです。応答しない場合は、再接続に進みます。したがって、これは多かれ少なかれ、一定期間データが送信されていないときに、サーバーがまだ接続されているかどうかを確認しています。

4

0 に答える 0