开发者

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜