2012-05-26 35 views
12

Tôi đang sử dụng mã này để đọcSử dụng streambuf như đệm cho tăng ASIO đọc và viết

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

và điều này vì đã viết

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

nơi socket_ được ổ cắm, max_length là enum với giá trị 1024 và data_ là mảng char có độ dài max_length.

Nhưng tôi muốn thay thế bộ đệm mảng char bằng streambuf. Tôi đã thử

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

Nhưng không hoạt động. Tôi làm nó như thế nào ?

Trả lời

12

Bạn cần nhận số mutable_buffers_type từ streambuf để sử dụng làm thông số đầu tiên của bạn thành 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)); 

Xem asio tài liệu herehere để biết thêm.

Các vấn đề liên quan