2012-05-26 9 views
12

Estoy usando este código para leerUso streambuf como tampón para el impulso asio leer y escribir

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

y esto para escribir

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

donde socket_ se toma, es max_length enumeración con un valor de 1024 y data_ es una matriz de caracteres con una longitud de max_length.

Pero quiero reemplazar el búfer de matriz char con streambuf. Lo he intentado

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

Pero no está funcionando. Cómo puedo hacerlo ?

Respuesta

12

Necesita obtener un mutable_buffers_type del streambuf para usar como su primer parámetro en 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)); 

Consulte la documentación asiohere y here para obtener más información.

Cuestiones relacionadas