From 7f67e5c34a005cb34e5d4bae7411d9af049d9105 Mon Sep 17 00:00:00 2001 From: Ben Darnell Date: Fri, 18 May 2018 14:45:42 -0400 Subject: [PATCH] iostream,netutil: PR feedback from #2353 - Don't swallow errors from SO_REUSEPORT since it's opt-in. - Use errno_from_exception. - Add comments --- tornado/iostream.py | 5 +++-- tornado/netutil.py | 12 +++++------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/tornado/iostream.py b/tornado/iostream.py index 53ca94ecc..89e1e234e 100644 --- a/tornado/iostream.py +++ b/tornado/iostream.py @@ -1413,8 +1413,9 @@ class IOStream(BaseIOStream): try: err = self.socket.getsockopt(socket.SOL_SOCKET, socket.SO_ERROR) except socket.error as e: - err = e.args[0] - if err == errno.ENOPROTOOPT: + # Hurd doesn't allow SO_ERROR for loopback sockets because all + # errors for such sockets are reported synchronously. + if errno_from_exception(e) == errno.ENOPROTOOPT: err = 0 if err != 0: self.error = socket.error(err, os.strerror(err)) diff --git a/tornado/netutil.py b/tornado/netutil.py index 89fe1b3bb..e63683ad7 100644 --- a/tornado/netutil.py +++ b/tornado/netutil.py @@ -141,14 +141,11 @@ def bind_sockets(port, address=None, family=socket.AF_UNSPEC, try: sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) except socket.error as e: - if e.args[0] != errno.ENOPROTOOPT: + if errno_from_exception(e) != errno.ENOPROTOOPT: + # Hurd doesn't support SO_REUSEADDR. raise if reuse_port: - try: - sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) - except socket.error as e: - if e.args[0] != errno.ENOPROTOOPT: - raise + sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) if af == socket.AF_INET6: # On linux, ipv6 sockets accept ipv4 too by default, # but this makes it impossible to bind to both @@ -191,7 +188,8 @@ if hasattr(socket, 'AF_UNIX'): try: sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) except socket.error as e: - if e.args[0] != errno.ENOPROTOOPT: + if errno_from_exception(e) != errno.ENOPROTOOPT: + # Hurd doesn't support SO_REUSEADDR raise sock.setblocking(0) try: -- 2.47.2