I have a TCP client connecting to my server which is sending raw data packets. How, using Boost.Asio, can I get the “whole” packet every time (asynchronously, of course)? Assume these packets can be any size up to the full size of my memory.
Basically, I want to avoid creating a statically sized buffer.
typically, when you do async IO, your protocol should support it.
one easy way is to prefix a byte array with it’s length at the logical level, and have the reading code buffer up until it has a full buffer ready for parsing.
if you don’t do it, you will end up with this logic scattered all over the place (think about reading a null terminated string, and what it means if you just get a part of it every time select/poll returns).