Если UDP-пакеты передаются по сети, гарантированно ли я получу их на уровне приложения?

Во-первых, я понимаю, что UDP не является надежным протоколом, и мне не гарантируется получение пакетов по сети.

Однако, если пакет все-таки достигнет моей машины, гарантированно ли я получу его на уровне приложения, или сетевой стек может безнаказанно выбросить его?

Причина, по которой я спрашиваю, заключается в том, что мне иногда кажется, что пакеты пропускаются, хотя я знаю, что они подключены к сети (простая шина EtherCAT, поэтому пакеты всегда возвращаются).


person GazTheDestroyer    schedule 08.06.2012    source источник


Ответы (1)


Нет, нет гарантии, что пакеты достигнут вашего приложения, даже если они достигнут вашего компьютера.

Очередь приема UDP ядра конечна, и если пакеты прибывают быстрее, чем ваше приложение может их обработать, очередь будет заполнена, и некоторые пакеты будут отброшены.

Вы можете увеличить размер приемного буфера (см. этот вопрос), но вы не можете сделать его неограниченным.

person Frédéric Hamidi    schedule 08.06.2012
comment
Да, в этом есть смысл. Большое спасибо. - person GazTheDestroyer; 08.06.2012