Odczyt z gniazda: Czy jest zagwarantowane przynajmniej uzyskanie x bajtów?

Mam rzadki błąd, który zdaje się pojawiać w gnieździe.

Wydaje się, że podczas odczytu danych czasami otrzymuję tylko 1-3 bajty pakietu danych, który jest większy niż ten.

Jak dowiedziałem się z programowania rur, zawsze otrzymuję co najmniej 512 bajtów, o ile nadawca dostarcza wystarczających danych.

Również mój nadawca przynajmniej przesyła> 4 bajty za każdym razem, gdy coś transmituje - więc myślałem, że przynajmniej 4 bajty zostaną odebrane na początku (!!) transmisji.

W 99,9% wszystkich przypadków moje przypuszczenie wydaje się mieć ... ale są naprawdę rzadkie przypadki, gdy odbierane są mniej niż 4 bajty. Wydaje mi się śmieszne, dlaczego system sieciowy powinien to zrobić?

Czy ktoś wie więcej?

Oto kod do czytania, którego używam:

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

Nadawca wysyła pełny datagram za pomocą jednego wywołania wysyłania.

Edycja: cała rzecz działa na localhost - nie ma więc żadnych skomplikowanych aplikacji sieciowych (routerów itp.). BUFSIZE wynosi co najmniej 512, a nadawca wysyła co najmniej 4 bajty.

questionAnswers(7)

yourAnswerToTheQuestion