Upstream-Status: Pending Signed-off-by: Ross Burton From 8103b90148e8768456c3ab707de105d63d9d5b20 Mon Sep 17 00:00:00 2001 From: Ross Burton Date: Fri, 17 Jun 2022 11:53:59 +0100 Subject: [PATCH] Mitigate the race condition in testSockName find_unused_port() has an inherent race condition, but we can't use bind_port() as that uses .getsockname() which this test is exercising. Try binding to unused ports a few times before failing. --- Lib/test/test_socket.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index c981903824..b1630d18b6 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -1390,10 +1390,21 @@ def testStringToIPv6(self): def testSockName(self): # Testing getsockname() - port = socket_helper.find_unused_port() sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.addCleanup(sock.close) - sock.bind(("0.0.0.0", port)) + + # Since find_unused_port() is inherently subject to race conditions, we + # call it a couple times if necessary. + for i in itertools.count(): + port = socket_helper.find_unused_port() + try: + sock.bind(("0.0.0.0", port)) + except OSError as e: + if e.errno != errno.EADDRINUSE or i == 5: + raise + else: + break + name = sock.getsockname() # XXX(nnorwitz): http://tinyurl.com/os5jz seems to indicate # it reasonable to get the host's addr in addition to 0.0.0.0. -- 2.25.1