diff --git a/consumer.py b/consumer.py index 4a94c2c..7c0128f 100644 --- a/consumer.py +++ b/consumer.py @@ -123,6 +123,9 @@ class MessageConsumer: if hasattr(self.srv, "_on_connect"): self.srv._on_connect() + elif msg.cmd == "ERROR": + self.srv.close() + elif msg.cmd == "PING": self.srv.write("%s :%s" % ("PONG", msg.params[0])) diff --git a/server/IRC.py b/server/IRC.py index 3d3c7b2..1abe8ef 100644 --- a/server/IRC.py +++ b/server/IRC.py @@ -69,5 +69,5 @@ class IRCServer(SocketServer): def _close(self): - self.write("QUIT") - SocketServer._close(self) + if self.socket is not None: self.write("QUIT") + return SocketServer._close(self) diff --git a/server/socket.py b/server/socket.py index e432abf..c3a4824 100644 --- a/server/socket.py +++ b/server/socket.py @@ -59,17 +59,23 @@ class SocketServer(AbstractServer): def _close(self): self._sending_queue.join() if self.socket is not None: - self.socket.shutdown(socket.SHUT_RDWR) - self.socket.close() + try: + self.socket.shutdown(socket.SHUT_RDWR) + self.socket.close() + except socket.error: + pass self.socket = None + return True def _write(self, cnt): + if self.socket is None: return self.socket.send(cnt) def format(self, txt): return txt.encode() + b'\r\n' def read(self): + if self.socket is None: return raw = self.socket.recv(1024) temp = (self.readbuffer + raw).split(b'\r\n') self.readbuffer = temp.pop()