From: Christian Heller Date: Thu, 5 Jun 2025 14:24:33 +0000 (+0200) Subject: Disallow sending to (probably) closed connections. X-Git-Url: https://plomlompom.com/repos/%22https:/validator.w3.org/static/edit?a=commitdiff_plain;h=dfe0cab673bd4ca090305df04169bb8a84ef4459;p=ircplom Disallow sending to (probably) closed connections. --- diff --git a/ircplom.py b/ircplom.py index 16c3ca7..54a8599 100755 --- a/ircplom.py +++ b/ircplom.py @@ -161,6 +161,7 @@ class IrcConnection: self._socket = socket() self._socket.settimeout(TIMEOUT_CONNECT) self._socket.connect((hostname, PORT)) + self._assumed_open = True self._socket.settimeout(TIMEOUT_LOOP) self._recv_loop = SocketRecvLoop(self._idx, self._q_to_main, self._read_lines()) @@ -171,6 +172,7 @@ class IrcConnection: def close(self): 'Close both SocketRecvLoop and socket.' + self._assumed_open = False self._recv_loop.stop() self._socket.close() @@ -210,6 +212,10 @@ class IrcConnection: def _write_line(self, line: str) -> None: 'Send line-separator-delimited message over socket.' + if not self._assumed_open: + self._q_to_main.eput('ALERT', + 'cannot send, assuming connection closed') + return self._socket.sendall(line.encode('utf-8') + IRCSPEC_LINE_SEPARATOR) def handle(self, event: Event) -> None: @@ -217,8 +223,13 @@ class IrcConnection: msg: IrcMessage = event.payload[1] if event.type_ == 'SEND': self._write_line(msg.raw) - if event.type_ == 'RECV' and msg.verb == 'PING': - self._broadcast('SEND', IrcMessage('PONG', [msg.parameters[0]])) + elif event.type_ == 'RECV': + if msg.verb == 'PING': + self._broadcast('SEND', + IrcMessage('PONG', [msg.parameters[0]])) + elif msg.verb == 'ERROR'\ + and msg.parameters[0].startswith('Closing link:'): + self._assumed_open = False class IrcMessage: