Чтение из сокета: гарантированно получено хотя бы x байтов?

У меня есть редкая ошибка, которая возникает при чтении сокета.

Кажется, что при чтении данных иногда я получаю только 1-3 байта пакета данных, который больше этого.

Как я узнал из конвейерного программирования, я всегда получаю как минимум 512 байт, если отправитель предоставляет достаточно данных.

Также мой отправитель по крайней мере передает>= 4 байта в любое время, когда он передает что-либо - поэтому я думал, что как минимум 4 байта будут получены сразу в начале (!!) передачи.

Похоже, что в 99,9% всех случаев мое предположение остается в силе ... но есть действительно редкие случаи, когда получено менее 4 байтов. Мне кажется смешным, почему сетевая система должна это делать?

Кто-нибудь знает больше?

Вот код чтения, который я использую:

mySock, addr = masterSock.accept()
mySock.settimeout(10.0)
result = mySock.recv(BUFSIZE)
# 4 bytes are needed here ...
...
# read remainder of datagram
...

Отправитель отправляет полную дейтаграмму одним вызовом отправки.

Изменить: все это работает на локальном хосте - так что никаких сложных сетевых приложений (маршрутизаторы и т. Д.) Не участвуют. Значение BUFSIZE составляет не менее 512, а отправитель отправляет не менее 4 байтов.

Ответы на вопрос(7)

Ваш ответ на вопрос