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