From: Christian Heller Date: Thu, 5 Jun 2025 19:07:18 +0000 (+0200) Subject: Open connection window before connection success, log error to it. X-Git-Url: https://plomlompom.com/repos/%22https:/validator.w3.org/static/tasks?a=commitdiff_plain;h=c471ffa8dad887e541acf2e796126056b7070f2a;p=ircplom Open connection window before connection success, log error to it. --- 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: