如何获取 Udp 缓冲区大小超过丢失的数据包

How To Get Udp Buffer Size Exceeded Packets Which Are Lost

我需要使用缓冲区大小 2048 通过 python 在 udp 上进行通信,我使用下面的代码从 udp 侦听,但是我丢失了缓冲区大小之后的部分,以及下一个消息缓冲区大小超出部分的数据包不再来了。 缓冲区大小超出的部分不应该留在 OS 或内核缓冲区上,当我收到数据包时它会丢失吗?

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    s.bind(('', PORT))
    s.setblocking(0)
    print(s)
    while (True):
        print(s.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF))
        result = select.select([s], [], [])
        msg = result[0][0].recv(2048)
        msg = msg.decode('ascii')
        print(len(msg))
        print(isinstance(msg, str))
        print(msg)

s.close()

编辑: 谢谢大家,现在我明白我不应该发送大于我的缓冲区的包。此外,似乎最好不要使用超过 1500 的缓冲区大小。

不,您无法获取太大的 UDP 数据包部分(无论 IP 级分段和重组如何)。数据报的要点是它们作为一个单元到达;你的逻辑不会通过实现额外的重组层来简化,而不是仅仅使用足够大的缓冲区(你应该从你的协议中知道)。