Recvfrom() возвращаемое значение

Я использую пакеты UDP и хочу прояснить некоторые моменты:
1 - что именно возвращает "recvfrom"? Я имею в виду, если я отправлю пакет размером 450 байт + 20 байт заголовка IP + 8 байт заголовка UDP, recvfrom возвращает 478 байт в целом или может быть что-то вроде:
он получил 10 байт, 300 байт, 100 bytes,68 bytes ?
2 - связано ли возвращаемое значение "recvfrom" с фрагментацией пакета?

примечание:
* Я говорю с предположением, что "recvfrom" был успешным
* Я выбрал 450 байт, чтобы быть уверенным, что я меньше минимального MTU


person saeed hardan    schedule 01.01.2014    source источник


Ответы (1)


  1. Для сокета UDP функция recvfrom() считывает данные UDP. Таким образом, он возвращает 450 при условии, что вы предоставили буфер размером не менее 450 байт. Если вы укажете буфер, который меньше, чем полученные данные, данные будут усечены, и recvfrom() будет считывать столько данных, сколько может поместиться в предоставленный вами буфер.

  2. Уровень IP будет той частью, которая фрагментирует UDP-пакет, а на принимающем узле собирает его заново. Это прозрачно для отправляющего/принимающего приложения.

person nos    schedule 01.01.2014
comment
предполагая, что я предоставил достаточно большой буфер, единственное возможное возвращаемое значение - 450, верно? - person saeed hardan; 01.01.2014
comment
Да или -1 в случае ошибки. Поскольку это UDP, вы можете вообще не получить пакет. - person nos; 01.01.2014
comment
Большое спасибо, это беспокоило меня, потому что мне нужно реализовать функциональность, подобную tcp, с пакетами udp. - person saeed hardan; 01.01.2014