From 5a1427c8a376652532ad9e815571ed265964fe95 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Charles-Fran=C3=A7ois=20Natali?= Date: Sat, 26 Jul 2014 13:44:50 +0100 Subject: [PATCH] Issue #19875: Fix random test_getsockaddrarg() failure. --- Lib/test/test_socket.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index 5d5005bc6c..28fd37813f 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -2,6 +2,7 @@ import unittest from test import test_support import errno +import itertools import socket import select import time @@ -600,17 +601,24 @@ class GeneralModuleTests(unittest.TestCase): sock.close() def test_getsockaddrarg(self): - host = '0.0.0.0' - port = self._get_unused_port(bind_address=host) + sock = socket.socket() + self.addCleanup(sock.close) + port = test_support.find_unused_port() big_port = port + 65536 neg_port = port - 65536 - sock = socket.socket() - try: - self.assertRaises(OverflowError, sock.bind, (host, big_port)) - self.assertRaises(OverflowError, sock.bind, (host, neg_port)) - sock.bind((host, port)) - finally: - sock.close() + self.assertRaises(OverflowError, sock.bind, (HOST, big_port)) + self.assertRaises(OverflowError, sock.bind, (HOST, neg_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 = test_support.find_unused_port() + try: + sock.bind((HOST, port)) + except OSError as e: + if e.errno != errno.EADDRINUSE or i == 5: + raise + else: + break @unittest.skipUnless(os.name == "nt", "Windows specific") def test_sock_ioctl(self): -- 2.50.1