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

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

下一个最好的方法可能是将数据包recv一个临时缓冲区,然后放下它。 看来我不能接收0字节,因为男人说关于recvThe return value will be 0 when the peer has performed an orderly shutdown. 所以在这种情况下1是最小的。

有没有其他办法来处理这个问题?

以防万一 – 这不是一个不成熟的优化。 这个服务器唯一做的就是以特定的方式转发/发送UDP数据包 – 尽piperecv len=1 recv不会杀了我,我宁愿只是用一些更具体的函数丢掉整个队列(希望降低延迟)。

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

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

只要你觉得适合接收数据包,就可以将缓冲区设置为例如4096字节。

我宁愿放弃整个队列

由于这是UDP,我们在这里说: close(udp_server_socket)和套接字()/ bind()再次?

我的理解应该工作。

男人说关于recv:当对方执行有序的关机时,返回值将是0。

这不适用于UDP。 在UDP中没有“连接”关闭。 返回值0是完全有效的,它只是意味着没有有效载荷的数据报被接收(即只有IP和UDP报头)。

不知道这有助于你的问题。 我真的不明白你在哪里用len = 1的东西。