diff --git a/CHANGES.rst b/CHANGES.rst index 259fc8c..0d69251 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,3 +1,7 @@ +15.0.5 +====== +* #119: Handle broken pipe exception in IRCClient _send() (server.py). + 15.0.4 ====== diff --git a/irc/server.py b/irc/server.py index 4ed4482..5c95b5c 100755 --- a/irc/server.py +++ b/irc/server.py @@ -43,6 +43,7 @@ from __future__ import print_function, absolute_import import argparse +import errno import logging import socket import select @@ -184,7 +185,13 @@ def _handle_line(self, line): def _send(self, msg): log.debug('to %s: %s', self.client_ident(), msg) - self.request.send(msg.encode('utf-8') + b'\r\n') + try: + self.request.send(msg.encode('utf-8') + b'\r\n') + except socket.error as e: + if e.errno == errno.EPIPE: + raise self.Disconnect() + else: + raise def handle_nick(self, params): """