mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Linux: Content server: Do not call listen on pre-activated sockets
Fixes #2039395 [Don't call listen() for systemd-allocated sockets](https://bugs.launchpad.net/calibre/+bug/2039395) Fixes #2069 (calibre-server: don't call listen() on pre-allocated sockets)
This commit is contained in:
parent
347b911b8d
commit
77f303179c
@ -411,6 +411,7 @@ class ServerLoop:
|
||||
self.ssl_context.set_servername_callback(self.on_ssl_servername)
|
||||
|
||||
self.pre_activated_socket = None
|
||||
self.socket_was_preactivated = False
|
||||
if self.opts.allow_socket_preallocation:
|
||||
from calibre.srv.pre_activated import pre_activated_socket
|
||||
self.pre_activated_socket = pre_activated_socket()
|
||||
@ -501,12 +502,14 @@ class ServerLoop:
|
||||
self.do_bind()
|
||||
else:
|
||||
self.socket = self.pre_activated_socket
|
||||
self.socket_was_preactivated = True
|
||||
self.pre_activated_socket = None
|
||||
self.setup_socket()
|
||||
|
||||
def serve(self):
|
||||
self.connection_map = {}
|
||||
self.socket.listen(min(socket.SOMAXCONN, 128))
|
||||
if not self.socket_was_preactivated:
|
||||
self.socket.listen(min(socket.SOMAXCONN, 128))
|
||||
self.bound_address = ba = self.socket.getsockname()
|
||||
if isinstance(ba, tuple):
|
||||
ba = ':'.join(map(str, ba))
|
||||
|
@ -214,6 +214,7 @@ class LoopTest(BaseTest):
|
||||
os.closerange(3, 4) # Ensure the socket gets fileno == 3
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
|
||||
s.bind(('localhost', 0))
|
||||
s.listen() # pre-activated sockets are already listening
|
||||
port = s.getsockname()[1]
|
||||
self.ae(s.fileno(), 3)
|
||||
os.environ['LISTEN_PID'] = str(os.getpid())
|
||||
|
Loading…
x
Reference in New Issue
Block a user