Skip to content

Commit

Permalink
Close aiohttp session after a failed connection (Fixes #307)
Browse files Browse the repository at this point in the history
  • Loading branch information
miguelgrinberg committed Feb 7, 2023
1 parent 7b7d21a commit 86ed2ae
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 8 deletions.
22 changes: 14 additions & 8 deletions src/engineio/asyncio_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,9 +162,7 @@ async def disconnect(self, abort=False):
client.connected_clients.remove(self)
except ValueError: # pragma: no cover
pass
if self.http and not self.http.closed: # pragma: no cover
await self.http.close()
self._reset()
await self._reset()

def start_background_task(self, target, *args, **kwargs):
"""Start a background task.
Expand Down Expand Up @@ -197,6 +195,12 @@ def create_event(self):
"""Create an event object."""
return asyncio.Event()

async def _reset(self):
super()._reset()
if not self.external_http: # pragma: no cover
if self.http and not self.http.closed:
await self.http.close()

def __del__(self): # pragma: no cover
# try to close the aiohttp session if it is still open
if self.http and not self.http.closed:
Expand All @@ -221,11 +225,13 @@ async def _connect_polling(self, url, headers, engineio_path):
'GET', self.base_url + self._get_url_timestamp(), headers=headers,
timeout=self.request_timeout)
if r is None or isinstance(r, str):
self._reset()
await self.disconnect()
await self._reset()
raise exceptions.ConnectionError(
r or 'Connection refused by the server')
if r.status < 200 or r.status >= 300:
self._reset()
await self.disconnect()
await self._reset()
try:
arg = await r.json()
except aiohttp.ClientError:
Expand Down Expand Up @@ -509,7 +515,7 @@ async def _read_loop_polling(self):
client.connected_clients.remove(self)
except ValueError: # pragma: no cover
pass
self._reset()
await self._reset()
self.logger.info('Exiting read loop task')

async def _read_loop_websocket(self):
Expand Down Expand Up @@ -560,7 +566,7 @@ async def _read_loop_websocket(self):
client.connected_clients.remove(self)
except ValueError: # pragma: no cover
pass
self._reset()
await self._reset()
self.logger.info('Exiting read loop task')

async def _write_loop(self):
Expand Down Expand Up @@ -610,7 +616,7 @@ async def _write_loop(self):
if r.status < 200 or r.status >= 300:
self.logger.warning('Unexpected status code %s in server '
'response, aborting', r.status)
self._reset()
await self._reset()
break
else:
# websocket
Expand Down
1 change: 1 addition & 0 deletions src/engineio/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ def __init__(self, logger=False, json=None, request_timeout=5,
self.ping_interval = None
self.ping_timeout = None
self.http = http_session
self.external_http = http_session is not None
self.handle_sigint = handle_sigint
self.ws = None
self.read_loop_task = None
Expand Down

0 comments on commit 86ed2ae

Please sign in to comment.