如何在没有 recvfrom 的情况下清除 UDP 缓冲区?
How can I clear UDP buffer without recvfrom?
我有一个嵌入式 linux 项目。它通过 UDP 从 UDP 缓冲区获取数据到静态字符数组。这个静态数组的大小是 20000 字节。我想忽略超过此大小的 UDB 消息。但是当有更大的数据时,它总是留在 UDP 缓冲区中,因为它不是用 recvfrom 读取的。有什么方法可以清除 UDP 缓冲区中的这个更大的数据吗?
不能在不读取的情况下丢弃套接字缓冲区中的数据。但是即使缓冲区较小,也可以读取这些大数据报 - 它会简单地丢弃任何不适合给定缓冲区的内容。要查明数据报是否太大,请使用 MSG_TRUNC
标志,以便它提供数据包的原始长度。如果这表明数据包过大,则丢弃它并继续处理下一个数据包。
我有一个嵌入式 linux 项目。它通过 UDP 从 UDP 缓冲区获取数据到静态字符数组。这个静态数组的大小是 20000 字节。我想忽略超过此大小的 UDB 消息。但是当有更大的数据时,它总是留在 UDP 缓冲区中,因为它不是用 recvfrom 读取的。有什么方法可以清除 UDP 缓冲区中的这个更大的数据吗?
不能在不读取的情况下丢弃套接字缓冲区中的数据。但是即使缓冲区较小,也可以读取这些大数据报 - 它会简单地丢弃任何不适合给定缓冲区的内容。要查明数据报是否太大,请使用 MSG_TRUNC
标志,以便它提供数据包的原始长度。如果这表明数据包过大,则丢弃它并继续处理下一个数据包。