Какое минимальное количество байтов приведет к возврату Socket.Receive?

Мы используем протокол приложения, который указывает индикатор длины сообщения в первых 4 байтах. Socket.Receive будет возвращать столько данных, сколько в стеке протокола за раз или в блоке, пока данные не станут доступны. Вот почему мы должны постоянно читать из сокета, пока не получим количество байтов в индикаторе длины. Socket.Receive вернет 0, если другая сторона закрыла соединение. Я все это понимаю.

Есть ли минимальное количество байтов, которые должны быть прочитаны? Причина, по которой я спрашиваю, заключается в том, что из документации вполне возможно, что индикатор длины (4 байта) может быть недоступен, когда socket.Receive может вернуться. Тогда нам придется продолжать пытаться. Было бы более эффективно минимизировать количество раз, которое мы вызываем socket.receive, потому что он должен копировать вещи в буферы и из них. Так что безопаснее получать по одному байту за раз, чтобы получить индикатор длины, безопасно ли предположить, что 4 байта всегда будут доступны, или мы должны продолжать пытаться получить 4 байта, используя переменную смещения?

Причина, по которой я думаю, что может быть какой-то минимальный уровень по умолчанию, заключается в том, что я натолкнулся на переменную ReceiveLowWater, которую я могу установить в параметрах сокета. Но, похоже, это относится только к BSD.MSDN Смотрите SO_RCVLOWAT.

Это не так уж важно, но я пытаюсь написать модульные тесты. Я уже обернул стандартный сокет .Net за интерфейсом.