streambuf で async_read を使用しています。ただし、本文に行く前にヘッダーを適切に処理できるように、読み取るデータの量を 4 に制限したいと思います。
async_read を使用してそれを行うにはどうすればよいですか?
streambuf で async_read を使用しています。ただし、本文に行く前にヘッダーを適切に処理できるように、読み取るデータの量を 4 に制限したいと思います。
async_read を使用してそれを行うにはどうすればよいですか?
async_read
最初の操作で 4 バイトのヘッダーを読み取り、2 番目の操作でメッセージ本文を読み取る2 つの操作を使用します。最初のハンドラーは、メッセージ本文async_read
の を開始する必要があります。async_read
asio の例では、この手法をいくつかの場所で使用しています。シリアライゼーションの例はその 1 つです。同様の質問にも答えましたが、同期読み取りを使用していますが、概念は同じです。
transfer_at_leastを async_read の CompletionConditionとして使用して、ヘッダーが使用可能であることを保証できます。
最初のヘッダーを処理すると、余分な本文データ (または追加のヘッダー) を処理できます。
boost::asio::transfer_exactly(streambuf.size())
必要なものです。次のように使用してみてください:
boost::asio::async_read(socket_,
buf,boost::asio::transfer_exactly(size_),
boost::bind(callback,
boost::asio::placeholders::error));