在某些情况下,我想以尽可能少的开销明确地丢弃在套接字上等待的数据包.似乎没有明确的“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 – 丢弃传入的UDP数据包而不读取全部内容,希望文章能够帮你解决linux – 丢弃传入的UDP数据包而不读取所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)