Используйте streambuf в качестве буфера для чтения и записи boost asio
Я использую этот код для чтения
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_-сокет, max_length-перечисление со значением 1024, а data_-массив символов с длиной max_length.
но я хочу заменить буфер массива char на streambuf. Я пытался
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 ответов
вам понадобится mutable_buffers_type
С streambuf
для использования в качестве первого параметра 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
документация здесь и здесь для получения дополнительной информации.