加入收藏 | 设为首页 | 会员中心 | 我要投稿 徐州站长网 (https://www.0516zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

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

发布时间:2020-12-30 22:41:46 所属栏目:Linux 来源:网络整理
导读:在某些情况下,我想以尽可能少的开销明确地丢弃在套接字上等待的数据包.似乎没有明确的“drop udp buffer”系统调用,但也许我错了? 下一个最好的方法可能是将数据包恢复到临时缓冲区并放弃它.我似乎无法接收0字节,因为man说的是recv:当对等体执行了有序关

在某些情况下,我想以尽可能少的开销明确地丢弃在套接字上等待的数据包.似乎没有明确的“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字节.

(编辑:徐州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读