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?
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?
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.