boost::asio::async_read and boost::asio::streambuf
I am using async_read with streambuf. However, I would like to limi开发者_运维知识库t the amount of data read to 4, so I can properly handle header before going to body.
How can I do that using async_read?
Use two async_read
operations where the first reads a 4 byte header, and the second reads the message body. Your handler to the first async_read
should start the async_read
for the message body.
The asio examples use this technique in a couple of places, the serialization example is one. I also answered a similar question, though it uses synchronous reads, but the concept is the same.
You can guarantee the header is available using transfer_at_least as CompletionCondition on async_read.
Any superfluous body data (or further headers) can be processed once you handle the initial header.
boost::asio::transfer_exactly(streambuf.size())
is what you need.just try using like this:
boost::asio::async_read(socket_,
buf,boost::asio::transfer_exactly(size_),
boost::bind(callback,
boost::asio::placeholders::error));
精彩评论