diff --git a/gunicorn/arbiter.py b/gunicorn/arbiter.py index 7b9ed76f..f3f63d20 100644 --- a/gunicorn/arbiter.py +++ b/gunicorn/arbiter.py @@ -10,6 +10,7 @@ import signal import sys import time import traceback +import socket from gunicorn.errors import HaltServer, AppImportError from gunicorn.pidfile import Pidfile @@ -152,7 +153,8 @@ class Arbiter(object): for fd in os.environ.pop('GUNICORN_FD').split(','): fds.append(int(fd)) - self.LISTENERS = sock.create_sockets(self.cfg, self.log, fds) + if not (self.cfg.reuse_port and hasattr(socket, 'SO_REUSEPORT')): + self.LISTENERS = sock.create_sockets(self.cfg, self.log, fds) listeners_str = ",".join([str(lnr) for lnr in self.LISTENERS]) self.log.debug("Arbiter booted") @@ -579,6 +581,8 @@ class Arbiter(object): try: util._setproctitle("worker [%s]" % self.proc_name) self.log.info("Booting worker with pid: %s", worker.pid) + if self.cfg.reuse_port: + worker.sockets = sock.create_sockets(self.cfg, self.log) self.cfg.post_fork(self, worker) worker.init_process() sys.exit(0)