在某些情况下,我想以尽可能少的开销明确地丢弃在套接字上等待的数据包.似乎没有明确的"drop udp buffer"系统调用,但也许我错了?
下一个最好的方法可能是recv
将数据包发送到临时缓冲区并放弃它.似乎我不能接收0字节,因为man说recv
:The return value will be 0 when the peer has performed an orderly shutdown.
在这种情况下,1是最小的.
有没有其他方法来处理这个?
以防万一 - 这不是一个不成熟的优化.此服务器正在做的是转发/以特定方式调度UDP数据包的唯一的事情-虽然recv
与len=1
不杀我,我宁愿只放弃整个队列一气呵成有一些更具体的功能(希望降低延迟) .
您可以通过将UDP接收缓冲区设置为0来让内核丢弃您的UDP数据包.
int UdpBufSize = 0; socklen_t optlen = sizeof(UdpBufSize); setsockopt(socket, SOL_SOCKET, SO_RCVBUF, &UdpBufSize, optlen);
只要您认为适合接收数据包,就可以将缓冲区设置为例如4096字节.