python3/windows-10 UDP套接字错误?

python3/windows-10 UDP套接字错误?,python,python-3.x,windows-10,udp,Python,Python 3.x,Windows 10,Udp,我不确定这里有什么,但python UDP套接字的某些东西似乎奇怪地被破坏了。我已经将一个失败的单元测试隔离到它自己的简化代码中,并将其包含在下面。间歇性故障(大约10次运行中有1次)。我找不到失败的模式。有时第一次失败,第二次成功。另一次,它将通过前5次,失败一次,然后继续成功 测试机器是运行python 3.8.1的Windows 10 Pro 当它失败时,数据包永远不会被发送。我可以确认运行WireShark并在环回接口上跟踪UDP数据包。当它失败时,数据包不会被发送。我知道UDP是无保证

我不确定这里有什么,但python UDP套接字的某些东西似乎奇怪地被破坏了。我已经将一个失败的单元测试隔离到它自己的简化代码中,并将其包含在下面。间歇性故障(大约10次运行中有1次)。我找不到失败的模式。有时第一次失败,第二次成功。另一次,它将通过前5次,失败一次,然后继续成功

测试机器是运行python 3.8.1的Windows 10 Pro

当它失败时,数据包永远不会被发送。我可以确认运行WireShark并在环回接口上跟踪UDP数据包。当它失败时,数据包不会被发送。我知道UDP是无保证的传输,但我从未考虑过这可以扩展到无保证传输。有没有可能我看到了某种Windows UDP数据包丢弃场景

注意:下面的代码是一个人为的测试来演示这个问题,但它是最小工作示例(MWE)

当它失败时,它会报告
socket.timeout
,这是由于调用
settimeout
。我尝试将超时设置为30秒,但它不会改变故障,也不会改变故障频率

我已经确认UDP端口55000上没有绑定任何内容,并且测试机器上的所有防火墙都已禁用


任何想法或想法(无论多么疯狂)都将受到赞赏。

UDP是一种不可靠的传输方式。你没有理由不看到失败。每1.5秒通过环回发送一个5字节的pkt,我们看到10%的下降率?派去?!这件事有些“感觉”不对。
import socket, threading, unittest

class Testmysock(unittest.TestCase):
    r"""mysock unittest test case"""

    def test_hello(self):
        r"""test hello over udp"""

        def hello():
            r"""reply to server with hello"""
            with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock:
                sock.sendto(b'hello', ('127.0.0.1', 55000))

        with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock:
            sock.bind(('127.0.0.1', 55000))
            thr = threading.Thread(target=hello)
            thr.start()
            sock.settimeout(2.0)
            msg = sock.recv(128)
            self.assertEqual(b'hello', msg)
            thr.join(0.0)