【发布时间】:2020-06-05 02:26:05
【问题描述】:
我有一个嵌入式 linux 项目。它通过 UDP 将数据从 UDP 缓冲区获取到静态字符数组。这个静态数组的大小是 20000 字节。我想忽略超过此大小的 UDB 消息。但是当数据更大时,它总是停留在 UDP 缓冲区中,因为它不是用 recvfrom 读取的。有什么办法可以清除 UDP 缓冲区中的这些大数据?
【问题讨论】:
我有一个嵌入式 linux 项目。它通过 UDP 将数据从 UDP 缓冲区获取到静态字符数组。这个静态数组的大小是 20000 字节。我想忽略超过此大小的 UDB 消息。但是当数据更大时,它总是停留在 UDP 缓冲区中,因为它不是用 recvfrom 读取的。有什么办法可以清除 UDP 缓冲区中的这些大数据?
【问题讨论】:
不读取就不能丢弃套接字缓冲区中的数据。但是即使有一个较小的缓冲区也可以读取这些大数据报——它会简单地丢弃任何不适合给定缓冲区的东西。要确定数据报是否太大,请使用MSG_TRUNC 标志,以便它提供数据包的原始长度。如果这表明数据包过大,则丢弃它并继续处理下一个数据包。
【讨论】: