diff options
author | Yury Selivanov <yury@magic.io> | 2018-06-29 01:59:32 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-29 01:59:32 (GMT) |
commit | d904c238ca3551750cb97d15d827c3e525970867 (patch) | |
tree | 8a937214dcd97d5f149d24915cda85d129d3d4a5 /Lib/asyncio/base_events.py | |
parent | 41cb0baea96a80360971908a0bd79d9d40dd5e44 (diff) | |
download | cpython-d904c238ca3551750cb97d15d827c3e525970867.zip cpython-d904c238ca3551750cb97d15d827c3e525970867.tar.gz cpython-d904c238ca3551750cb97d15d827c3e525970867.tar.bz2 |
bpo-27500: Fix static version of getaddrinfo to resolve IPv6 (GH-7993)
Diffstat (limited to 'Lib/asyncio/base_events.py')
-rw-r--r-- | Lib/asyncio/base_events.py | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py index 6b4756a..dc0ca3f 100644 --- a/Lib/asyncio/base_events.py +++ b/Lib/asyncio/base_events.py @@ -61,6 +61,8 @@ _MIN_CANCELLED_TIMER_HANDLES_FRACTION = 0.5 _FATAL_ERROR_IGNORE = (BrokenPipeError, ConnectionResetError, ConnectionAbortedError) +_HAS_IPv6 = hasattr(socket, 'AF_INET6') + def _format_handle(handle): cb = handle._callback @@ -123,7 +125,7 @@ def _ipaddr_info(host, port, family, type, proto): if family == socket.AF_UNSPEC: afs = [socket.AF_INET] - if hasattr(socket, 'AF_INET6'): + if _HAS_IPv6: afs.append(socket.AF_INET6) else: afs = [family] @@ -139,7 +141,10 @@ def _ipaddr_info(host, port, family, type, proto): try: socket.inet_pton(af, host) # The host has already been resolved. - return af, type, proto, '', (host, port) + if _HAS_IPv6 and af == socket.AF_INET6: + return af, type, proto, '', (host, port, 0, 0) + else: + return af, type, proto, '', (host, port) except OSError: pass @@ -1309,7 +1314,6 @@ class BaseEventLoop(events.AbstractEventLoop): raise ValueError( 'host/port and sock can not be specified at the same time') - AF_INET6 = getattr(socket, 'AF_INET6', 0) if reuse_address is None: reuse_address = os.name == 'posix' and sys.platform != 'cygwin' sockets = [] @@ -1349,7 +1353,9 @@ class BaseEventLoop(events.AbstractEventLoop): # Disable IPv4/IPv6 dual stack support (enabled by # default on Linux) which makes a single socket # listen on both address families. - if af == AF_INET6 and hasattr(socket, 'IPPROTO_IPV6'): + if (_HAS_IPv6 and + af == socket.AF_INET6 and + hasattr(socket, 'IPPROTO_IPV6')): sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, True) |