我需要读取最近传入的 UDP 数据包,无论读取之间丢弃的数据包如何。传入数据包的传入速度比最大应用程序处理速度快 3 倍。为了实现这一点,我使用setReceiveBufferSize(int size)
Java 的DatagramSocket
类将其设置为SO_RCVBUF
与我预期的数据包相同的大小(以字节为单位)。
但是,在我得到最新的数据包之前仍然有 3 个数据包延迟(如果传入速率是接收速率的 10 倍,则有 10 个数据包延迟)。这表明它SO_RCVBUF
包含的不仅仅是最新的数据包。
首先,单位是setReceiveBufferSize(int size)
字节吗?javadocs中没有明确说明。其次,有没有办法禁用SO_RCVBUF
,以便我只接收最近传入的数据包?例如,零是函数的非法参数,但理论上我可以将接收缓冲区大小设置为 1。