Boost.ASIO UDP套接字:接收所有数据包

Boost.ASIO UDP socket: sink all the packets

我正在使用 boost::asio::ip::udp::socket 通过套接字的 async_receive_from 方法接收 UDP 数据包。

代码运行良好,唯一的问题是在我处理数据包时,更多的数据包会创建队列(缓冲区)进行处理。我的程序虽然必须接收自处理开始以来收到的所有数据包,以便它只侦听最近的数据包。

示例:

有什么办法可以把中间的包丢掉吗? 谢谢!

  1. 使用仅包含单个数据报的缓冲区。

  2. 继续读入缓冲区,直到没有更多数据报可读。

  3. 如果至少读取一个数据包,则处理缓冲区中的数据报。

  4. 转到步骤 2。

请注意,UDP 是数据报协议,而不是数据包协议。单个 UDP 数据报可以拆分为多个数据包。

我认为可以很简单地完成:

  1. async_receive_from直到收到一个包裹。
  2. 检查available方法以确定套接字中是否有更多数据。
  3. 如果我们有更多数据,丢弃缓冲区并转到1;否则处理数据包