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.ssl_context.set_servername_callback(self.on_ssl_servername)
|
||||||
|
|
||||||
self.pre_activated_socket = None
|
self.pre_activated_socket = None
|
||||||
|
self.socket_was_preactivated = False
|
||||||
if self.opts.allow_socket_preallocation:
|
if self.opts.allow_socket_preallocation:
|
||||||
from calibre.srv.pre_activated import pre_activated_socket
|
from calibre.srv.pre_activated import pre_activated_socket
|
||||||
self.pre_activated_socket = pre_activated_socket()
|
self.pre_activated_socket = pre_activated_socket()
|
||||||
@ -501,11 +502,13 @@ class ServerLoop:
|
|||||||
self.do_bind()
|
self.do_bind()
|
||||||
else:
|
else:
|
||||||
self.socket = self.pre_activated_socket
|
self.socket = self.pre_activated_socket
|
||||||
|
self.socket_was_preactivated = True
|
||||||
self.pre_activated_socket = None
|
self.pre_activated_socket = None
|
||||||
self.setup_socket()
|
self.setup_socket()
|
||||||
|
|
||||||
def serve(self):
|
def serve(self):
|
||||||
self.connection_map = {}
|
self.connection_map = {}
|
||||||
|
if not self.socket_was_preactivated:
|
||||||
self.socket.listen(min(socket.SOMAXCONN, 128))
|
self.socket.listen(min(socket.SOMAXCONN, 128))
|
||||||
self.bound_address = ba = self.socket.getsockname()
|
self.bound_address = ba = self.socket.getsockname()
|
||||||
if isinstance(ba, tuple):
|
if isinstance(ba, tuple):
|
||||||
|
@ -214,6 +214,7 @@ class LoopTest(BaseTest):
|
|||||||
os.closerange(3, 4) # Ensure the socket gets fileno == 3
|
os.closerange(3, 4) # Ensure the socket gets fileno == 3
|
||||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
|
||||||
s.bind(('localhost', 0))
|
s.bind(('localhost', 0))
|
||||||
|
s.listen() # pre-activated sockets are already listening
|
||||||
port = s.getsockname()[1]
|
port = s.getsockname()[1]
|
||||||
self.ae(s.fileno(), 3)
|
self.ae(s.fileno(), 3)
|
||||||
os.environ['LISTEN_PID'] = str(os.getpid())
|
os.environ['LISTEN_PID'] = str(os.getpid())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user