From: Ben Darnell Date: Fri, 18 May 2018 18:45:42 +0000 (-0400) Subject: iostream,netutil: PR feedback from #2353 X-Git-Tag: v5.1.0b1~13^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7f67e5c34a005cb34e5d4bae7411d9af049d9105;p=thirdparty%2Ftornado.git iostream,netutil: PR feedback from #2353 - Don't swallow errors from SO_REUSEPORT since it's opt-in. - Use errno_from_exception. - Add comments --- 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: