使用sendto()和recvfrom()来传递数据报

时间:2015-10-23 02:53:47

标签: udp

如果发送者使用sendto()几次,而接收者在while循环中使用recvfrom(),当第二个数据报在接收者完成处理第一个数据报之前到达时,它会丢失吗?

1 个答案:

答案 0 :(得分:0)

这取决于您的架构,驱动程序。

到达接收器的数据包通常放在驱动程序的接收队列中,并相应地处理,如传递到IP层的队列(基于体系结构)。如果此处有任何溢出,则它将被丢弃在驱动程序本身或IP层。但是,如果已经传递了这些层,但是如果接收套接字缓冲区(UDP套接字中排队的UDP空间量)已满,则UDP数据包将被丢弃,否则将不会被丢弃。

netstat是此类场景中的便捷工具之一。 netstat -s 应按协议列出统计信息。 -p 选项可用于显示特定协议。

如果你想在发送者和接收者之间进行适当的同步,那么只有当接收者通过某种方式(或某种流量控制机制)来暗示发送者时,它才是可行的。 UDP协议不支持它。如果您正在寻找此类同步,则需要选择TCP协议。