Qual é o número mínimo de bytes que fará com que o Socket.Receive retorne?

Estamos usando um protocolo de aplicativo que especifica o indicador de comprimento da mensagem nos primeiros 4 bytes. Socket.Receive retornará tantos dados quanto na pilha de protocolos no momento ou bloco até que os dados estejam disponíveis. É por isso que temos que ler continuamente do soquete até recebermos o número de bytes no indicador de comprimento. O Socket.Receive retornará 0 se o outro lado fechar a conexão. Eu entendo tudo isso.

Existe um número mínimo de bytes que devem ser lidos? A razão que eu pergunto é a partir da documentação, parece perfeitamente possível que o indicador inteiro comprimento (4 bytes) pode não estar disponível quando o socket.Receive pode retornar. Teríamos então que ter que continuar tentando. Seria mais eficiente minimizar o número de vezes que chamamos socket.receive porque ele precisa copiar coisas dentro e fora dos buffers. Então, é mais seguro obter um único byte de cada vez para obter o indicador de comprimento, é seguro assumir que 4 bytes estarão sempre disponíveis ou devemos continuar tentando obter 4 bytes usando uma variável offset?

A razão que eu acho que pode haver algum tipo de nível mínimo padrão é que me deparei com uma variável chamada ReceiveLowWater variável que eu possa definir nas opções de soquete. Mas isso parece se aplicar apenas ao BSD.MSDN Veja SO_RCVLOWAT.

Não é tão importante assim, mas estou tentando escrever testes de unidade. Eu já envolvi um padrão .Net Socket por trás de uma interface.

questionAnswers(2)

yourAnswerToTheQuestion