如何在没有recvfrom的情况下清除UDP缓冲区?

问题描述 投票:0回答:1

我有一个嵌入式linux项目。它通过UDP从UDP缓冲区获取数据到静态数组。这个静态数组的大小是20000字节。我想忽略超过这个大小的UDB消息。但是当有更大的数据时,由于没有用recvfrom读取,所以它一直停留在UDP缓冲区中。有什么办法可以清除UDP缓冲区中的大数据吗?

c linux udp
1个回答
1
投票

不能不读就丢弃socket缓冲区的数据。但是,即使有一个较小的缓冲区,也可以读取这些大的数据报--它将简单地丢弃任何不适合给定缓冲区的数据。要找出数据报是否过大,可以使用 MSG_TRUNC 标志,这样它将提供数据包的原始长度。如果这表明一个过大的数据包,只需丢弃它并继续下一个数据包。

© www.soinside.com 2019 - 2024. All rights reserved.