当前位置:  开发笔记 > 后端 > 正文

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

如何解决《丢弃传入的UDP数据包而不读取》经验,为你挑选了1个好方法。

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

下一个最好的方法可能是recv将数据包发送到临时缓冲区并放弃它.似乎我不能接收0字节,因为man说recv:The return value will be 0 when the peer has performed an orderly shutdown.在这种情况下,1是最小的.

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

以防万一 - 这不是一个不成熟的优化.此服务器正在做的是转发/以特定方式调度UDP数据包的唯一的事情-虽然recvlen=1不杀我,我宁愿只放弃整个队列一气呵成有一些更具体的功能(希望降低延迟) .



1> WindsurferOa..:

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

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

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

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有