2012-05-26 18 views
12

ich diesen Code bin mitVerwenden streambuf als Puffer für Boost Asio lesen und schreiben

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

und diese zum Schreiben

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

wo socket_ Buchse ist, max_length Enum mit dem Wert 1024 und data_ ist ein char-Array mit der Länge von max_length.

Aber ich will Char-Array-Puffer mit Streambuf ersetzen. Ich habe versucht

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

Aber funktioniert nicht. Wie kann ich es tun ?

Antwort

12

Sie müssen eine mutable_buffers_type von der streambuf als ersten Parameter zu async_read_some verwenden.

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

finden Sie in der Dokumentation asiohere und here für weitere Informationen.