From c471ffa8dad887e541acf2e796126056b7070f2a Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Thu, 5 Jun 2025 21:07:18 +0200 Subject: [PATCH] Open connection window before connection success, log error to it. --- ircplom.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/ircplom.py b/ircplom.py index 203c8b2..f9d9a90 100755 --- a/ircplom.py +++ b/ircplom.py @@ -6,7 +6,7 @@ from contextlib import contextmanager from inspect import _empty as inspect_empty, signature, stack from queue import SimpleQueue, Empty as QueueEmpty from signal import SIGWINCH, signal -from socket import socket +from socket import socket, gaierror as socket_gaierror from threading import Thread from typing import ( Any, Callable, Generator, Iterator, Literal, NamedTuple, Optional, Self) @@ -158,14 +158,20 @@ class IrcConnection: ) -> None: self._idx = idx self._q_to_main = q_to_main + self._assumed_open = False + self._recv_loop: Optional[SocketRecvLoop] = None self._socket = socket() self._socket.settimeout(TIMEOUT_CONNECT) - self._socket.connect((hostname, PORT)) + self._broadcast('CONNECTION_WINDOW', self._idx) + try: + self._socket.connect((hostname, PORT)) + except socket_gaierror as e: + self._broadcast('CONN_ALERT', str(e)) + return self._assumed_open = True self._socket.settimeout(TIMEOUT_LOOP) self._recv_loop = SocketRecvLoop(self._idx, self._q_to_main, self._read_lines()) - self._broadcast('CONNECTION_WINDOW', self._idx) self._broadcast('SEND', IrcMessage('USER', [login[0], '0', '*', login[2]])) self._broadcast('SEND', IrcMessage('NICK', [login[1]])) @@ -173,7 +179,8 @@ class IrcConnection: def close(self): 'Close both SocketRecvLoop and socket.' self._assumed_open = False - self._recv_loop.stop() + if self._recv_loop: + self._recv_loop.stop() self._socket.close() def _broadcast(self, type_: str, payload: Any = None) -> None: -- 2.30.2