X-Git-Url: https://git.novaco.in/?p=electrum-server.git;a=blobdiff_plain;f=server.py;fp=server.py;h=decdd89392b0e60c75f4b1a191ff23f4edb56601;hp=0b0e18200a46b8bc5fc5a170e2b5cfbec2383dee;hb=57e177fc275a816b6eca588cf98cb65ab46a475a;hpb=d356795c5b45d3597075085a8ddf56b74f0ba36c diff --git a/server.py b/server.py index 0b0e182..decdd89 100755 --- a/server.py +++ b/server.py @@ -179,6 +179,15 @@ if __name__ == '__main__': dispatcher = Dispatcher(config) shared = dispatcher.shared + # handle termination signals + import signal + def handler(signum = None, frame = None): + print_log('Signal handler called with signal', signum) + shared.stop() + for sig in [signal.SIGTERM, signal.SIGHUP, signal.SIGQUIT]: + signal.signal(sig, handler) + + # Create and register processors chain_proc = BlockchainProcessor(config, shared) dispatcher.register('blockchain', chain_proc) @@ -207,20 +216,21 @@ if __name__ == '__main__': for server in transports: server.start() - - - from SimpleXMLRPCServer import SimpleXMLRPCServer + from SimpleXMLRPCServer import SimpleXMLRPCServer server = SimpleXMLRPCServer(('localhost',8000), allow_none=True, logRequests=False) server.register_function(lambda: os.getpid(), 'getpid') server.register_function(shared.stop, 'stop') server.register_function(cmd_info, 'info') server.register_function(cmd_debug, 'debug') + server.socket.settimeout(1) while not shared.stopped(): try: server.handle_request() + except socket.timeout: + continue except: shared.stop()