From 15408a357f5b9d668452408124a0e996554c02c4 Mon Sep 17 00:00:00 2001 From: Randall Leeds Date: Tue, 14 Mar 2017 13:49:41 -0700 Subject: [PATCH] Catch errors setting SO_REUSEPORT Fix #1480 --- gunicorn/sock.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/gunicorn/sock.py b/gunicorn/sock.py index 6f3044b2..562a6653 100644 --- a/gunicorn/sock.py +++ b/gunicorn/sock.py @@ -39,8 +39,12 @@ class BaseSocket(object): def set_options(self, sock, bound=False): sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - if hasattr(socket, 'SO_REUSEPORT'): - sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) + if hasattr(socket, 'SO_REUSEPORT'): # pragma: no cover + try: + sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) + except socket.error as err: + if err[0] not in (errno.ENOPROTOOPT, errno.EINVAL): + raise if not bound: self.bind(sock) sock.setblocking(0)