2012-05-26 21 views
12

sto usando questo codice per la lettura diUsa streambuf come buffer per la spinta asio leggere e scrivere

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

e questo per la scrittura

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

dove socket_ è presa, max_length è enum con un valore 1024 e data_ è un array di caratteri con lunghezza di max_length.

Ma voglio sostituire il buffer di array di caratteri con streambuf. Ho provato

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

Ma non funziona. Come posso farlo ?

risposta

12

È necessario ottenere un mutable_buffers_type da streambuf da utilizzare come primo parametro su 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)); 

Vedere la documentazione asiohere e here per maggiori informazioni.