Graceful shutdown; close #179
This commit is contained in:
parent
964d7613cb
commit
327c70e353
7 changed files with 46 additions and 22 deletions
|
@ -30,6 +30,7 @@ import eventloop
|
|||
import tcprelay
|
||||
import udprelay
|
||||
import asyncdns
|
||||
import signal
|
||||
|
||||
|
||||
def main():
|
||||
|
@ -67,13 +68,14 @@ def main():
|
|||
udp_servers.append(udprelay.UDPRelay(a_config, dns_resolver, False))
|
||||
|
||||
def run_server():
|
||||
def child_handler(signum, _):
|
||||
logging.warn('received SIGQUIT, doing graceful shutting down..')
|
||||
map(lambda s: s.close(next_tick=True), tcp_servers + udp_servers)
|
||||
signal.signal(signal.SIGQUIT, child_handler)
|
||||
try:
|
||||
loop = eventloop.EventLoop()
|
||||
dns_resolver.add_to_loop(loop)
|
||||
for tcp_server in tcp_servers:
|
||||
tcp_server.add_to_loop(loop)
|
||||
for udp_server in udp_servers:
|
||||
udp_server.add_to_loop(loop)
|
||||
map(lambda s: s.add_to_loop(loop), tcp_servers + udp_servers)
|
||||
loop.run()
|
||||
except (KeyboardInterrupt, IOError, OSError) as e:
|
||||
logging.error(e)
|
||||
|
@ -97,11 +99,13 @@ def main():
|
|||
if not is_child:
|
||||
def handler(signum, _):
|
||||
for pid in children:
|
||||
os.kill(pid, signum)
|
||||
os.waitpid(pid, 0)
|
||||
try:
|
||||
os.kill(pid, signum)
|
||||
except OSError: # child may already exited
|
||||
pass
|
||||
sys.exit()
|
||||
import signal
|
||||
signal.signal(signal.SIGTERM, handler)
|
||||
signal.signal(signal.SIGQUIT, handler)
|
||||
|
||||
# master
|
||||
for a_tcp_server in tcp_servers:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue