如何连接两个boost :: asio :: streambuf?

aby*_*s.7 6 c++ boost-asio

boost::asio用作网络框架.作为它使用的读/写介质boost::asio::streambuf.我想要:

  • 在一个缓冲区中读取一些消息
  • 在第一个缓冲区的开头添加第二个缓冲区
  • 发送新的复合邮件

有什么可能的有效(零拷贝)选项来做到这一点?

Raw*_*ler 7

该原则被称为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 );
Run Code Online (Sandbox Code Playgroud)

当然,一个简单的选择是将两条消息都读入streambuf并简单地发送整个streambuf,但是从你的问题我猜它不是出于某种原因的选择?