summaryrefslogtreecommitdiffstats
path: root/Lib/asyncio/base_events.py
diff options
context:
space:
mode:
authorYury Selivanov <yury@magic.io>2018-06-29 01:59:32 (GMT)
committerGitHub <noreply@github.com>2018-06-29 01:59:32 (GMT)
commitd904c238ca3551750cb97d15d827c3e525970867 (patch)
tree8a937214dcd97d5f149d24915cda85d129d3d4a5 /Lib/asyncio/base_events.py
parent41cb0baea96a80360971908a0bd79d9d40dd5e44 (diff)
downloadcpython-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.py14
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)