Soquete de bloqueio .NET lido até que X bytes estejam disponívei
Suponha que eu tenha um protocolo simples implementado sobre TCP, onde cada mensagem é composta de:
Aint
indicando o comprimento dos dados. Dados binários, com o comprimento especificado em 1.Lendo essa mensagem, eu gostaria de algo como:
int length = input.ReadInt();
byte[] data = input.ReadBytes(length);
UsingSocket.Receive
ouNetworkStream.Read
o número disponível de bytes é lido. Quero a ligação paraReadBytes
para bloquear atélength
bytes estão disponívei
Existe uma maneira simples de fazer isso, sem ter que repetir a leitura, reiniciando em um deslocamento aguardando os dados restante
Em um aplicativo real, a leitura provavelmente deve ser feita de forma assíncrona ou em um encadeamento em segundo plano, mas eu o ignorei por enquanto. O importante é não poder concluir a leitura até que todos os dados estejam disponívei
Edita Eu sei que posso armazenar em buffer os dados e sei como fazê-lo. É apenas uma volta em torno deReceive
que continua no próximo deslocamento. O que estou pedindo é se existe uma implementação reutilizável desse loop, sem a necessidade de um loop próprio de qualquer tipo (ou, alternativamente, de uma implementação assíncrona reutilizável que termina quando todos os dados estão disponíveis