0

ストリームバッファがあり、存在することがわかっているn個のデータを送信する必要があります(ライターから取得します)。以下の構文を使用できます。

streambuf b;
chat mybuf[1024]
std::istream is(&b);
is.read(mybuf,500);

このようにして、データをコピーします。ポインタのみを取得し、データのコピーを避けたい。以下のように送信したい:

asio::tcp::socket socket_;
socket_->send(

保護された`gbumを運転streambufして使用する方法はありますか?これは良い方法ですか?gptr

私は何をする必要がありますか?

4

1 に答える 1

2

boost::asio::streambufバッファキューにすぎません。を使用しstreambuf::data()ます。コミットされたバッファを表すバッファウィッチのリストを返します。送信/書き込みに成功しstreambuf::consume(size_t)たら、バッファを削除/再利用します。

streambuf b;
size_t size;
size= read( _socket, b.prepare( 1024 ) ); 
b.commit( size );   // after this function you may call read again
size= write( socket_, b.data() ); // you can check size() if there is anything
b.consume(size);  // remove size bytes from data() buffers  
于 2012-05-15T12:29:36.037 に答える