) -> None:
         self._idx = idx
         self._q_to_main = q_to_main
+        self._login = login
         self._assumed_open = False
         self._recv_loop: Optional[SocketRecvLoop] = None
         self._socket = socket()
         self._socket.settimeout(TIMEOUT_CONNECT)
         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('SEND', IrcMessage('USER', [login[0], '0', '*',
-                                                    login[2]]))
-        self._broadcast('SEND', IrcMessage('NICK', [login[1]]))
+
+        def connect(self):
+            self._broadcast('CONN_ALERT', f'Connecting to {hostname} …')
+            try:
+                self._socket.connect((hostname, PORT))
+            except (TimeoutError, socket_gaierror) as e:
+                self._broadcast('CONN_ALERT', str(e))
+                return
+            self._socket.settimeout(TIMEOUT_LOOP)
+            self._assumed_open = True
+            self._broadcast('CONNECTED')
+            self._recv_loop = SocketRecvLoop(self._idx, self._q_to_main,
+                                             self._read_lines())
+
+        Thread(target=connect, args=(self,)).start()
 
     def close(self):
         'Close both SocketRecvLoop and socket.'
 
     def handle(self, event: Event) -> None:
         'Process connection-directed Event into further steps.'
+        if event.type_ == 'CONNECTED':
+            self._broadcast('SEND', IrcMessage('USER', [self._login[0], '0',
+                                                        '*', self._login[2]]))
+            self._broadcast('SEND', IrcMessage('NICK', [self._login[1]]))
+            return
         msg: IrcMessage = event.payload[1]
         if event.type_ == 'SEND':
             self._write_line(msg.raw)
                 if event.type_ == 'INIT_CONNECTION':
                     connections += [IrcConnection(q_to_main, len(connections),
                                                   *event.payload)]
-                elif event.type_ in {'RECV', 'SEND'}:
+                elif event.type_ in {'CONNECTED', 'RECV', 'SEND'}:
                     connections[event.payload[0]].handle(event)
     finally:
         for conn in connections: