Handle connection errors (like timeout)

This commit is contained in:
nemunaire 2014-09-08 02:30:18 +02:00
parent eba4a07ed1
commit 9b9c02fe29
3 changed files with 13 additions and 4 deletions

View File

@ -123,6 +123,9 @@ class MessageConsumer:
if hasattr(self.srv, "_on_connect"): if hasattr(self.srv, "_on_connect"):
self.srv._on_connect() self.srv._on_connect()
elif msg.cmd == "ERROR":
self.srv.close()
elif msg.cmd == "PING": elif msg.cmd == "PING":
self.srv.write("%s :%s" % ("PONG", msg.params[0])) self.srv.write("%s :%s" % ("PONG", msg.params[0]))

View File

@ -69,5 +69,5 @@ class IRCServer(SocketServer):
def _close(self): def _close(self):
self.write("QUIT") if self.socket is not None: self.write("QUIT")
SocketServer._close(self) return SocketServer._close(self)

View File

@ -59,17 +59,23 @@ class SocketServer(AbstractServer):
def _close(self): def _close(self):
self._sending_queue.join() self._sending_queue.join()
if self.socket is not None: if self.socket is not None:
self.socket.shutdown(socket.SHUT_RDWR) try:
self.socket.close() self.socket.shutdown(socket.SHUT_RDWR)
self.socket.close()
except socket.error:
pass
self.socket = None self.socket = None
return True
def _write(self, cnt): def _write(self, cnt):
if self.socket is None: return
self.socket.send(cnt) self.socket.send(cnt)
def format(self, txt): def format(self, txt):
return txt.encode() + b'\r\n' return txt.encode() + b'\r\n'
def read(self): def read(self):
if self.socket is None: return
raw = self.socket.recv(1024) raw = self.socket.recv(1024)
temp = (self.readbuffer + raw).split(b'\r\n') temp = (self.readbuffer + raw).split(b'\r\n')
self.readbuffer = temp.pop() self.readbuffer = temp.pop()