Я ожидаю, что ваш первый вызов recv(4)
скопирует первые четыре байта из вашей дейтаграммы, а затем выбросит оставшуюся часть пакета на пол; ваш второй вызов recv
затем не находит ничего для чтения и возвращает EOFError. Из udp(7)
руководства моей системы:
All receive operations return only one packet. When the packet
is smaller than the passed buffer, only that much data is
returned; when it is bigger, the packet is truncated and the
MSG_TRUNC flag is set. MSG_WAITALL is not supported.
Попробуйте прочитать всю дейтаграмму, взять длину из первых четырех байтов и затем работать с подмножеством массива, в котором хранится вся дейтаграмма.
Конечно, если ваши огурцы не вписываются полностью в MTU соединения, вероятно, он никогда не будет работать так, как вы собираетесь.