From 038590c6590b4117368037aa5aca1939b152a5ed Mon Sep 17 00:00:00 2001 From: nemunaire Date: Sun, 31 Aug 2014 10:51:44 +0200 Subject: [PATCH] Server disconnection works properly --- bot.py | 2 +- nemubot.py | 2 -- server/__init__.py | 3 ++- server/socket.py | 3 ++- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/bot.py b/bot.py index cce1a4e..f9ebf10 100644 --- a/bot.py +++ b/bot.py @@ -394,7 +394,7 @@ class Bot(threading.Thread): logger.info("Close all servers connection...") k = list(self.servers.keys()) for srv in k: - self.servers[srv].disconnect() + self.servers[srv].close() self.stop = True diff --git a/nemubot.py b/nemubot.py index f04899c..a958de4 100755 --- a/nemubot.py +++ b/nemubot.py @@ -87,6 +87,4 @@ if __name__ == "__main__": print ("\nWaiting for other threads shuts down...") - # Indeed, the server socket is waiting for receiving some data - sys.exit(0) diff --git a/server/__init__.py b/server/__init__.py index 9f423c2..3162c3f 100644 --- a/server/__init__.py +++ b/server/__init__.py @@ -70,9 +70,10 @@ class AbstractServer(io.IOBase): def write_select(self): """Internal function used by the select function""" try: + _wlist.remove(self) while not self._sending_queue.empty(): self._write(self._sending_queue.get_nowait()) - _wlist.remove(self) + self._sending_queue.task_done() except queue.Empty: pass diff --git a/server/socket.py b/server/socket.py index 21d3d0c..e432abf 100644 --- a/server/socket.py +++ b/server/socket.py @@ -57,8 +57,9 @@ class SocketServer(AbstractServer): return True def _close(self): + self._sending_queue.join() if self.socket is not None: - self.socket.shutdown(SHUT_RDWR) + self.socket.shutdown(socket.SHUT_RDWR) self.socket.close() self.socket = None