From 9348dd5208fcd91e11237c1884074ff8949fe025 Mon Sep 17 00:00:00 2001 From: Aric Stewart Date: Fri, 31 Aug 2012 09:24:09 -0500 Subject: [PATCH] Implement option --idle-timeout server exits after TIMEOUT seconds if there are no active connections --- websocket.py | 13 ++++++++++++- websockify | 3 +++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/websocket.py b/websocket.py index 11f718c..cbca3bb 100644 --- a/websocket.py +++ b/websocket.py @@ -101,7 +101,7 @@ Sec-WebSocket-Accept: %s\r def __init__(self, listen_host='', listen_port=None, source_is_ipv6=False, verbose=False, cert='', key='', ssl_only=None, daemon=False, record='', web='', - run_once=False, timeout=0): + run_once=False, timeout=0, idle_timeout=0): # settings self.verbose = verbose @@ -112,6 +112,7 @@ Sec-WebSocket-Accept: %s\r self.daemon = daemon self.run_once = run_once self.timeout = timeout + self.idle_timeout = idle_timeout self.launch_time = time.time() self.ws_connection = False @@ -837,6 +838,10 @@ Sec-WebSocket-Accept: %s\r self.client = None startsock = None pid = err = 0 + child_count = 0 + + if multiprocessing and self.idle_timeout: + child_count = len(multiprocessing.active_children()) time_elapsed = time.time() - self.launch_time if self.timeout and time_elapsed > self.timeout: @@ -844,6 +849,12 @@ Sec-WebSocket-Accept: %s\r % self.timeout) break + if self.idle_timeout and time_elapsed > self.idle_timeout \ + and child_count == 0: + self.msg('listener exit due to --idle-timeout %s' + % self.idle_timeout) + break + try: self.poll() diff --git a/websockify b/websockify index 965ce13..13f6582 100755 --- a/websockify +++ b/websockify @@ -308,6 +308,9 @@ def websockify_init(): help="handle a single WebSocket connection and exit") parser.add_option("--timeout", type=int, default=0, help="after TIMEOUT seconds exit when not connected") + parser.add_option("--idle-timeout", type=int, default=0, + help="server exits after TIMEOUT seconds if there are no " + "active connections") parser.add_option("--cert", default="self.pem", help="SSL certificate file") parser.add_option("--key", default=None,