Существует что-то вроде максимального размера сетевого пакета:
МТ
это указывает на максимальный размер буфера низкого уровня (3 IP-адреса на уровне iso / osi) во время передачи данных по сети (без обратной связи).
Что обычно составляет 1492 в сетях Ethernet.
Так что стоит оптимизировать передачу данных до размера этой суммы.
(есть также так называемые Jumbo frames , которые нарушают это правило, но должно быть программное / аппаратное обеспечение, которое принимает это)
Однако простая функция recv () для сокета может вернуть больше байтов, чем MTU.
Поэтому вам нужно передать первый пакет с размером остальных данных.
size = recv(512) // size should came in one shot
while( count(data) == size) // the rest of actual data can came sliced, so You should receive until size
data[offset] = recv(size)