私はネットワークフレームワークとしてboost::asio
を使用します。読み取り/書き込み媒体としては、boost::asio::streambuf
を使用します。私がしたい: 2つのboost :: asio :: streambufをどのように連結するのですか?
- が一つのバッファにいくつかのメッセージを読むことができ、効率的とは何
(ゼロコピー)オプションを使用しますか?
私はネットワークフレームワークとしてboost::asio
を使用します。読み取り/書き込み媒体としては、boost::asio::streambuf
を使用します。私がしたい: 2つのboost :: asio :: streambufをどのように連結するのですか?
(ゼロコピー)オプションを使用しますか?
scatter/gather IO
と呼ばれています。基本的には、高価なメモリコピーをせずに、一度に複数のバッファを(順番に)送信する方法。 boost :: asioの下では、非常に柔軟で強力な(把握が難しい)バッファーコンセプト、バッファーシーケンスコンセプトで十分サポートされています。
(未テストが、私が正しいと信じて)簡単な例あなたが始めるためには、次のようになります。もちろん
std::vector<boost::asio::streambuf::const_buffers_type> buffers;
buffers.push_back(my_first_streambuf.data());
buffers.push_back(my_second_streambuf.data());
std::size_t length = boost::asio::write(mySocket, buffers);
を、1つの簡単なオプションは、単にストリームバッファに両方のメッセージを読んで、単純に送信することですstreambuf全体ですが、あなたの質問から私はそれが何らかの理由でオプションではないと推測していますか?
フリー関数は、バッファのコレクション(たとえばthis)を受け入れることができます。結果バッファはバッファのコピーではなく、送信されるシーケンスです。