2012-02-27 14 views
4

私はネットワークフレームワークとしてboost::asioを使用します。読み取り/書き込み媒体としては、boost::asio::streambufを使用します。私がしたい: 2つのboost :: asio :: streambufをどのように連結するのですか?

  • が新しい複合メッセージを送る最初の1
  • の初めに第2のバッファを追加

    • が一つのバッファにいくつかのメッセージを読むことができ、効率的とは何

    (ゼロコピー)オプションを使用しますか?

  • 答えて

    5

    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全体ですが、あなたの質問から私はそれが何らかの理由でオプションではないと推測していますか?

    0

    フリー関数は、バッファのコレクション(たとえばthis)を受け入れることができます。結果バッファはバッファのコピーではなく、送信されるシーケンスです。

    関連する問題