views:

88

answers:

2

I am using async_read with streambuf. However, I would like to limit 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?

+2  A: 

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.

Sam Miller
+1 for using the richness of the API better than my suggestion
Steve Townsend
+1  A: 

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.

Steve Townsend