Browse Source

Add a timeout for the IRC connection establishment and fix the error message

master
JustAnotherArchivist 3 years ago
parent
commit
d1d4e55184
1 changed files with 9 additions and 4 deletions
  1. +9
    -4
      irclog.py

+ 9
- 4
irclog.py View File

@@ -674,12 +674,17 @@ class IRCClient:
connectionClosedEvent.clear()
try:
self.logger.debug('Creating IRC connection')
self._transport, self._protocol = await loop.create_connection(
t = asyncio.create_task(loop.create_connection(
protocol_factory = lambda: IRCClientProtocol(self.messageQueue, connectionClosedEvent, loop, self.config, self.channels),
host = self.config['irc']['host'],
port = self.config['irc']['port'],
ssl = self._get_ssl_context(),
)
))
done, _ = await asyncio.wait({t, asyncio.create_task(sigintEvent.wait())}, return_when = asyncio.FIRST_COMPLETED, timeout = 30)
if t not in done:
t.cancel()
await t # Raises the CancelledError
self._transport, self._protocol = t.result()
self.logger.debug('Starting send queue processing')
asyncio.create_task(self._protocol.send_queue()) # Quits automatically on connectionClosedEvent
self.logger.debug('Waiting for connection closure or SIGINT')
@@ -690,8 +695,8 @@ class IRCClient:
if not connectionClosedEvent.is_set():
self.logger.debug('Quitting connection')
await self._protocol.quit()
except (ConnectionRefusedError, ssl.SSLError, asyncio.TimeoutError) as e:
self.logger.error(str(e))
except (ConnectionRefusedError, ssl.SSLError, asyncio.TimeoutError, asyncio.CancelledError) as e:
self.logger.error(f'{type(e).__module__}.{type(e).__name__}: {e!s}')
await asyncio.wait({asyncio.create_task(sigintEvent.wait())}, timeout = 5)
if sigintEvent.is_set():
self.logger.debug('Got SIGINT, putting EOF and breaking')


Loading…
Cancel
Save