0

我有一个流缓冲区,我需要发送我知道存在的 n 个数据(从 writer 获取)我可以使用 belo 语法:

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

这样我复制数据。我只想获取指针并避免复制数据。我想发送如下:

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

有没有办法驱动streambuf和使用受保护的gptr和`gbum,这是一个好方法吗?

我需要做什么?

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 回答