如果UDP数据包在线上,我是否保证在应用层获取它们?

首先我感谢UDP不是一个可靠的协议,我不能保证通过networking接收数据包。

但是,如果数据包到达我的机器,我是否保证在应用程序级别上收到数据包,或者networking堆栈是否可以将其丢弃而不受惩罚?

我问的原因是我似乎偶尔会丢失数据包,即使我知道它们在线路上(简单的EtherCAT总线,所以数据包总是回送)。

不,不能保证数据包即使到达您的机器也能够到达您的应用程序。

内核的UDP接收队列是有限的,如果数据包到达的速度比应用程序能够处理的速度快,则队列将被填满,并且一些数据包将被丢弃。

您可以增加接收缓冲区的大小(请参阅此问题 ),但不能使其无限制。