При условии, что в сокете нет границ сообщений в сокете.Одна передача может быть использована несколькими получателями, а другая - частично и частично.Рассматривайте сокет TCP как поток.Либо отправляйте сообщения фиксированного размера, чтобы вы знали, сколько байтов нужно прочитать, либо встраивайте размер сообщения в само сообщение (желательно в самом начале сообщения), чтобы вы могли узнать его по ходу работы.
Редактировать:
Чтобы ответить на вопросы в вашем комментарии - этим занимается не только «MS OS» - это стеки TCP / IP по обе стороны соединения.Байты, записанные в сокет, буферизуются внутри ядра и отправляются по проводам, когда сетевой стек считает, что это лучшее время для этого (истекло время ожидания в ядре, очередь вывода достигла размера окна TCP и т. Д. - все это в деталях.о том, как работает TCP).Для TCP (но не для UDP) ядро не отслеживает границы записи приложения, только сколько байтов нужно отправить, сколько было подтверждено и т. Д. Это поток, ОС не знаето сообщениях приложения , только байты.