diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2024-01-22 16:40:35 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-22 16:40:35 (GMT) |
commit | a53e56e7d88b4f2a2943c9f191024198009fcf9e (patch) | |
tree | 9888a9dd9d544ddb720fa03780f5b244f3c24a91 /Lib | |
parent | 8ccd1ba461b44ca078ab120559637bd3ffe22e50 (diff) | |
download | cpython-a53e56e7d88b4f2a2943c9f191024198009fcf9e.zip cpython-a53e56e7d88b4f2a2943c9f191024198009fcf9e.tar.gz cpython-a53e56e7d88b4f2a2943c9f191024198009fcf9e.tar.bz2 |
gh-75128: Ignore EADDRNOTAVAIL error in asyncio.BaseEventLoop.create_server() (GH-114420)
Co-authored-by: Antoine Pitrou <pitrou@free.fr>
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/asyncio/base_events.py | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py index a8870b6..c60d768 100644 --- a/Lib/asyncio/base_events.py +++ b/Lib/asyncio/base_events.py @@ -16,6 +16,7 @@ to modify the meaning of the API call itself. import collections import collections.abc import concurrent.futures +import errno import functools import heapq import itertools @@ -1585,9 +1586,22 @@ class BaseEventLoop(events.AbstractEventLoop): try: sock.bind(sa) except OSError as err: - raise OSError(err.errno, 'error while attempting ' - 'to bind on address %r: %s' - % (sa, err.strerror.lower())) from None + msg = ('error while attempting ' + 'to bind on address %r: %s' + % (sa, err.strerror.lower())) + if err.errno == errno.EADDRNOTAVAIL: + # Assume the family is not enabled (bpo-30945) + sockets.pop() + sock.close() + if self._debug: + logger.warning(msg) + continue + raise OSError(err.errno, msg) from None + + if not sockets: + raise OSError('could not bind on any address out of %r' + % ([info[4] for info in infos],)) + completed = True finally: if not completed: |