title: Does Boost Asio networking send/recieve have any sort of data completeness guarantee?
body: <p>I've been using boost asio sockets (UDP and TCP) to handle a custom protocol between my client server program. Its been working great until I discovered that on TCP async_send/async_recieve calls that data can arrived in combined chunks.</p>
  
  <p>For example, if I make two send calls each with it's own packet, they can arrive combined at a single receive call. I wrongly assumed that every send corresponds to a receive, but I'm obviously wrong. It however has worked well for the longest time until I found the issue running the client for a different OS.</p>
  
  <p>So my question is: are there any guarantees to the completeness of the data on arrival for every receive call? (e.g. async_send 128 bytes arrive in multiples of 128 bytes, or how it arrives must always be treated as random, like 1 bytes arrives then 127 bytes is possible)</p>
  
  <p>More specifically, does this mean that:</p>
  
  <ul>
  <li>Data can arrive concatenated or partial for every send call, and I
  have to <strong>always</strong> handle the concatenated/partial data manually</li>
  <li>Is this true for both UDP and TCP asio sockets?</li>
  </ul>
  
  <p>I searched around and couldn't find any documentation on this so I was wondering if anyone have any idea.</p>