将streambuf用作boost asio读写的缓冲区

15

我正在使用这段代码进行读取

  socket_.async_read_some(boost::asio::buffer(data_, max_length),
        boost::bind(&session::handle_read, this,
        boost::asio::placeholders::error,
        boost::asio::placeholders::bytes_transferred));

这段用于写作。

boost::asio::async_write(socket_,
    boost::asio::buffer(data_, bytes_transferred),
    boost::bind(&session::handle_write, this,
    boost::asio::placeholders::error));

socket_是一个socket,max_length是一个值为1024的枚举类型,data_是具有长度等于max_length的字符数组。

但我想用streambuf替换char数组缓冲区。 我已经尝试过

  boost::asio::streambuf streamBuffer;
  socket_.async_read_some(boost::asio::buffer(streamBuffer),
        boost::bind(&session::handle_read, this,
        boost::asio::placeholders::error,
        boost::asio::placeholders::bytes_transferred));

但是不起作用。我该怎么做?

1个回答

16

你需要从streambuf中获取一个mutable_buffers_type,作为传递给async_read_some函数的第一个参数。

  boost::asio::streambuf streamBuffer;
  boost::asio::streambuf::mutable_buffers_type mutableBuffer =
      streamBuffer.prepare(max_length);
  socket_.async_read_some(boost::asio::buffer(mutableBuffer),
        boost::bind(&session::handle_read, this,
        boost::asio::placeholders::error,
        boost::asio::placeholders::bytes_transferred));

查看 asio 文档这里这里以获取更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接