mirror of
https://github.com/django/daphne.git
synced 2024-11-24 17:03:42 +03:00
Detect listening failures
This commit is contained in:
parent
20ff8fec28
commit
a57ef2fa54
|
@ -61,6 +61,7 @@ class Server(object):
|
||||||
self.websocket_protocols = ws_protocols
|
self.websocket_protocols = ws_protocols
|
||||||
self.root_path = root_path
|
self.root_path = root_path
|
||||||
self.verbosity = verbosity
|
self.verbosity = verbosity
|
||||||
|
self.abort_start = False
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
# A set of current Twisted protocol instances to manage
|
# A set of current Twisted protocol instances to manage
|
||||||
|
@ -93,7 +94,9 @@ class Server(object):
|
||||||
for socket_description in self.endpoints:
|
for socket_description in self.endpoints:
|
||||||
logger.info("Listening on endpoint %s", socket_description)
|
logger.info("Listening on endpoint %s", socket_description)
|
||||||
ep = serverFromString(reactor, str(socket_description))
|
ep = serverFromString(reactor, str(socket_description))
|
||||||
self.listeners.append(ep.listen(self.http_factory))
|
listener = ep.listen(self.http_factory)
|
||||||
|
listener.addErrback(self.listen_error)
|
||||||
|
self.listeners.append(listener)
|
||||||
|
|
||||||
# Set the asyncio reactor's event loop as global
|
# Set the asyncio reactor's event loop as global
|
||||||
# TODO: Should we instead pass the global one into the reactor?
|
# TODO: Should we instead pass the global one into the reactor?
|
||||||
|
@ -104,13 +107,21 @@ class Server(object):
|
||||||
asyncio.get_event_loop().set_debug(True)
|
asyncio.get_event_loop().set_debug(True)
|
||||||
|
|
||||||
reactor.addSystemEventTrigger("before", "shutdown", self.kill_all_applications)
|
reactor.addSystemEventTrigger("before", "shutdown", self.kill_all_applications)
|
||||||
reactor.run(installSignalHandlers=self.signal_handlers)
|
if not self.abort_start:
|
||||||
|
reactor.run(installSignalHandlers=self.signal_handlers)
|
||||||
|
|
||||||
|
def listen_error(self, failure):
|
||||||
|
logger.critical("Listen failure: %s", failure.getErrorMessage())
|
||||||
|
self.stop()
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
"""
|
"""
|
||||||
Force-stops the server.
|
Force-stops the server.
|
||||||
"""
|
"""
|
||||||
reactor.stop()
|
if reactor.running:
|
||||||
|
reactor.stop()
|
||||||
|
else:
|
||||||
|
self.abort_start = True
|
||||||
|
|
||||||
### Protocol handling
|
### Protocol handling
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user