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"):
self.srv._on_connect()
elif msg.cmd == "ERROR":
self.srv.close()
elif msg.cmd == "PING":
self.srv.write("%s :%s" % ("PONG", msg.params[0]))

View File

@ -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)

View File

@ -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()