linux – 丢弃传入的UDP数据包而不读取

前端之家收集整理的这篇文章主要介绍了linux – 丢弃传入的UDP数据包而不读取前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在某些情况下,我想以尽可能少的开销明确地丢弃在套接字上等待的数据包.似乎没有明确的“drop udp buffer”系统调用,但也许我错了?

下一个最好的方法可能是将数据包恢复到临时缓冲区并放弃它.我似乎无法接收0字节,因为man说的是recv:当对等体执行了有序关闭时,返回值将为0.所以1在这种情况下是最小的.

有没有其他方法来处理这个?

以防万一 – 这不是一个不成熟的优化.这台服务器唯一要做的就是以特定的方式转发/调度UDP数据包 – 虽然使用len = 1的recv不会杀了我,但我宁愿一次性丢弃整个队列,还有一些更具体的功能(希望如此)降低延迟).

最佳答案

您可以通过将UDP接收缓冲区设置为0来让内核丢弃您的UDP数据包.


int UdpBufSize = 0;
socklen_t optlen = sizeof(UdpBufSize);
setsockopt(socket,SOL_SOCKET,SO_RCVBUF,&UdpBufSize,optlen);

只要您认为适合接收数据包,就可以将缓冲区设置为例如4096字节.

猜你在找的Linux相关文章