Implement option --idle-timeout

server exits after TIMEOUT seconds if there are no active connections
This commit is contained in:
Aric Stewart 2012-08-31 09:24:09 -05:00
parent 17175afd73
commit 9348dd5208
2 changed files with 15 additions and 1 deletions

View File

@ -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()

View File

@ -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,