¿Cuál es el número mínimo de bytes que hará que Socket.Receive regrese?

Estamos utilizando un protocolo de aplicación que especifica el indicador de longitud del mensaje en los primeros 4 bytes. Socket.Receive devolverá tantos datos como en la pila de protocolos en el momento o bloque hasta que los datos estén disponibles. Es por eso que tenemos que leer continuamente desde el socket hasta que recibamos el número de bytes en el indicador de longitud. The Socket.Receive devolverá 0 si el otro lado cerró la conexión. Entiendo todo eso.

¿Hay un número mínimo de bytes que se deben leer? El motivo por el que pregunto es por la documentación que parece completamente posible que el indicador de longitud total (4 bytes) no esté disponible cuando socket.Receive pueda regresar. Entonces tendríamos que seguir intentando. Sería más eficiente minimizar el número de veces que llamamos socket.receive porque tiene que copiar cosas dentro y fuera de los buffers. Entonces, ¿es más seguro obtener un solo byte a la vez para obtener el indicador de longitud, es seguro asumir que 4 bytes siempre estarán disponibles o deberíamos intentar obtener 4 bytes utilizando una variable de compensación?

La razón por la que creo que puede haber algún tipo de nivel mínimo predeterminado es que encontré una variable llamada ReceiveLowWater que puedo establecer en las opciones de socket. Pero esto parece aplicarse solo a BSD.MSDN Ver SO_RCVLOWAT.

Realmente no es tan importante, pero estoy tratando de escribir pruebas unitarias. Ya envolví un .Net Socket estándar detrás de una interfaz.