diff --git a/src/Connection/ConnectionServer.py b/src/Connection/ConnectionServer.py index f81dc5f8..f2765d58 100644 --- a/src/Connection/ConnectionServer.py +++ b/src/Connection/ConnectionServer.py @@ -46,6 +46,7 @@ class ConnectionServer(object): self.stream_server = None self.stream_server_proxy = None self.running = False + self.stopping = False self.stat_recv = defaultdict(lambda: defaultdict(int)) self.stat_sent = defaultdict(lambda: defaultdict(int)) @@ -76,6 +77,8 @@ class ConnectionServer(object): self.handleRequest = request_handler def start(self, check_connections=True): + if self.stopping: + return False self.running = True if check_connections: self.thread_checker = gevent.spawn(self.checkConnections) @@ -99,16 +102,19 @@ class ConnectionServer(object): def listen(self): if not self.running: - return False + return None + if self.stream_server_proxy: gevent.spawn(self.listenProxy) try: self.stream_server.serve_forever() except Exception as err: self.log.info("StreamServer listen error: %s" % err) + return False def stop(self): self.log.debug("Stopping") + self.stopping = True self.running = False if self.stream_server: self.stream_server.stop() diff --git a/src/File/FileServer.py b/src/File/FileServer.py index 91b2b103..a6800f8f 100644 --- a/src/File/FileServer.py +++ b/src/File/FileServer.py @@ -2,6 +2,7 @@ import logging import time import random import socket +import sys import gevent import gevent.pool @@ -346,7 +347,20 @@ class FileServer(ConnectionServer): # Bind and start serving sites def start(self, check_sites=True): + if self.stopping: + return False + ConnectionServer.start(self) + + try: + self.stream_server.start() + except Exception as err: + self.log.error("Error listening on: %s:%s: %s" % (self.ip, self.port, err)) + if "ui_server" in dir(sys.modules["main"]): + self.log.debug("Stopping UI Server.") + sys.modules["main"].ui_server.stop() + return False + self.sites = self.site_manager.list() if config.debug: # Auto reload FileRequest on change