From a501b92791134924c5c7ada152623275dff33c7b Mon Sep 17 00:00:00 2001 From: valia0906 Date: Tue, 26 Sep 2017 13:38:42 +0300 Subject: [PATCH] Update websockifyserver.py On demand systemd or upstart socket activation --- websockify/websockifyserver.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/websockify/websockifyserver.py b/websockify/websockifyserver.py index 1b5b15e..e2eee7b 100644 --- a/websockify/websockifyserver.py +++ b/websockify/websockifyserver.py @@ -369,7 +369,16 @@ class WebSockifyServer(object): raise Exception("No 'ssl' module and SSL-only specified") if self.daemon and not resource: raise Exception("Module 'resource' required to daemonize") - + # Systemd or upstart socket detection + if os.environ.get('LISTEN_PID', None) == str(os.getpid()): + self.listen_host = "socketfromfd" + self.listen_port = 3 + self.msg("Detected systemd socket activation, listening fd %s", self.listen_port) + elif os.environ.get('UPSTART_EVENTS', None) == "socket": + self.listen_host = "socketfromfd" + self.listen_port = int(os.environ.get('UPSTART_FDS')) + self.msg("Detected upstart socket activation, listening fd %s", self.listen_port) + # Show configuration self.msg("WebSocket server settings:") if self.listen_fd != None: @@ -425,8 +434,13 @@ class WebSockifyServer(object): raise Exception("SSL only supported in connect mode (for now)") if not connect: flags = flags | socket.AI_PASSIVE - - if not unix_socket: + + # Starting systemd or upstart socket + if host == "socketfromfd": + sock = socket.fromfd(port, socket.AF_INET, socket.SOCK_STREAM) + if sys.version_info.major == 2: + sock = socket.socket(_sock=sock) + elif not unix_socket: addrs = socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM, socket.IPPROTO_TCP, flags) if not addrs: