From df61f6ab4dff11e5e233b52286e88241d46daffc Mon Sep 17 00:00:00 2001 From: R W H Bricheno Date: Mon, 30 Oct 2017 12:07:10 +0000 Subject: [PATCH] Prevent MacOS exception on shutdown of closed socket. --- tests/testlib.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tests/testlib.py b/tests/testlib.py index b1f0825c..69b61605 100644 --- a/tests/testlib.py +++ b/tests/testlib.py @@ -83,7 +83,21 @@ def wait_for_port( found = True break - sock.shutdown(socket.SHUT_RDWR) + try: + sock.shutdown(socket.SHUT_RDWR) + except socket.error, e: + # On Mac OS X - a BSD variant - the above code only succeeds if the operating system thinks that the + # socket is still open when shutdown() is invoked. If Python is too slow and the FIN packet arrives + # before that statement can be reached, then OS X kills the sock.shutdown() statement with: + # + # socket.error: [Errno 57] Socket is not connected + # + # Protect shutdown() with a try...except that catches the socket.error, test to make sure Errno is + # right, and ignore it if Errno matches. + if e.errno == 57: + pass + else: + raise sock.close() if found: