UDP sendto () и recvfrom () макс. размер буфера

Я понимаю, что макс. размер буфера по умолчанию, который я могу использовать с этими функциями, 65507 (5535 - заголовок IPv4 - заголовок UDP). Однако есть ли способ изменить это? Я должен смочь, отправляют большие буферные ~66000 байтов. Я пытался использовать setsockopt () функция, но это, казалось, не работало.

Спасибо!

12
задан Albert Myers 20 July 2010 в 16:49
поделиться

3 ответа

кстати, потому что оборачивающий IP-пакет может быть фрагментирован из-за ограничений MTU . Каждый из фрагментов может потеряться, а в UDP нет механизма восстановления. Таким образом, хотя теоретический предел полезной нагрузки UDP составляет прибл. 64 КБ, практический предел составляет около 1 КБ.

9
ответ дан 2 December 2019 в 05:26
поделиться

No.

UDP предоставляет датаграмму только как часть данных IP-пакета, IP-пакет имеет поле длиной 16 бит, что ограничивает данные до 2^16 байт, включая заголовки, или 65507 байт для части данных UDP (при условии отсутствия опций ipv4), нет никакого способа обрабатывать большие пакеты с UDP, кроме разделения их на несколько пакетов и обработки повторной сборки и т. Д. Самостоятельно.

13
ответ дан 2 December 2019 в 05:26
поделиться

Спецификация UDP дает вам 16 бит в заголовке UDP для размера пакета, что означает, что вы не можете отправить больше чем 65к сразу. Вы не можете это изменить.

Вы должны разбить данные на несколько пакетов. Использование TCP вместо UDP значительно упростит задачу, поскольку полнота и порядок получения гарантированы.

6
ответ дан 2 December 2019 в 05:26
поделиться