Use streambuf as buffer for boost asio read and write

痴心易碎 提交于 2019-12-04 10:16:42

问题


I'm using this code for reading

  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));

and this for writing

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

where socket_ is socket, max_length is enum with value 1024 and data_ is char array with length of max_length.

But I want to replace char array buffer with streambuf. I've tried

  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));

But isn't working. How can I do it ?


回答1:


You need to get a mutable_buffers_type from the streambuf to use as your first parameter to 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));

See the asio documentation here and here for more info.



来源:https://stackoverflow.com/questions/10764986/use-streambuf-as-buffer-for-boost-asio-read-and-write

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!