我有一个流缓冲区我需要发送我知道存在的数据(从编写器获取) 我可以使用belo语法:
streambuf b;
chat mybuf[1024]
std::istream is(&b);
is.read(mybuf,500);
通过这种方式我复制数据。我只想获取指针并避免复制数据。我想发送如下:
asio::tcp::socket socket_;
socket_->send(
有没有办法驱动streambuf
并使用受保护的gptr
和`gbum,这是一个好方法吗?
我需要做什么?
答案 0 :(得分:2)
boost::asio::streambuf
只不过是缓冲区队列。使用streambuf::data()
。它返回一个缓冲区列表,代表committed个缓冲区。成功发送/写入后,使用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