Если UDP-пакеты находятся в сети, могу ли я получить их на прикладном уровне?
Во-первых, я ценю, что UDP не является надежным протоколом, и мне не гарантирован прием пакетов через сеть.
Однако, если пакет действительно достигает моей машины, гарантированно ли я получу его на уровне приложения, или сетевой стек может отбросить его безнаказанно?
Причина, по которой я спрашиваю, заключается в том, что мне иногда не хватает пакетов, хотя я знаю, что они находятся в сети (простая шина EtherCAT, поэтому пакеты всегда возвращаются назад).
1 ответ
Нет, нет гарантии, что пакеты дойдут до вашего приложения, даже если они достигнут вашей машины.
Очередь приема UDP в ядре конечна, и если пакеты приходят быстрее, чем ваше приложение может их обработать, очередь заполнится и некоторые пакеты будут отброшены.
Вы можете увеличить размер буфера приема (см. Этот вопрос), но вы не можете сделать его неограниченным.