我使用boost::asio
作为网络框架。作为读写介质,它使用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 );
当然,一个简单的选择就是将两条消息都读入streambuf,然后简单地发送整个streambuf,但是由于您的问题,我猜测出于某种原因这不是一个选择吗?
关于c++ - 如何串联两个boost::asio::streambuf?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9463865/