-
-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Connecting to IPv6-only hosts fails with a RuntimeError #6195
Copy link
Copy link
Closed
Labels
bugclientregressionSomething that used to work stopped working "as before" after upgradeSomething that used to work stopped working "as before" after upgradereproducer: presentThis PR or issue contains code, which reproduce the problem described or clearly understandable STRThis PR or issue contains code, which reproduce the problem described or clearly understandable STR
Milestone
Description
Describe the bug
When aiohttp tries to connect to a host with only IPv6 address (with no IPv4 address), the exception RuntimeError: coroutine raised StopIteration is raised in TCPConnector._create_direct_connection caused by the StopIteration in _DNSCacheTable.next_addrs.
To Reproduce
- Create
aiohttp.ClientSession. - Try to request an URL with IPv6-only host, e.g.
ipv6.google.com.
E.g:await ClientSession().get('https://ipv6.google.com')
Expected behavior
await ClientSession().get('https://ipv6.google.com') does not fail and returns a response.
Logs/tracebacks
$ python -m asyncio
asyncio REPL 3.9.7 (default, Oct 10 2021, 15:13:22)
[GCC 11.1.0] on linux
>>> import asyncio
>>> from aiohttp import ClientSession
>>> await ClientSession().get('https://ipv6.google.com')
Traceback (most recent call last):
File "/home/***/.local/lib/python3.9/site-packages/aiohttp/connector.py", line 894, in _resolve_host
return self._cached_hosts.next_addrs(key)
File "/home/***/.local/lib/python3.9/site-packages/aiohttp/connector.py", line 716, in next_addrs
next(loop)
StopIteration
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/lib/python3.9/concurrent/futures/_base.py", line 445, in result
return self.__get_result()
File "/usr/lib/python3.9/concurrent/futures/_base.py", line 390, in __get_result
raise self._exception
File "<console>", line 1, in <module>
File "/home/***/.local/lib/python3.9/site-packages/aiohttp/client.py", line 535, in _request
conn = await self._connector.connect(
File "/home/***/.local/lib/python3.9/site-packages/aiohttp/connector.py", line 543, in connect
proto = await self._create_connection(req, traces, timeout)
File "/home/***/.local/lib/python3.9/site-packages/aiohttp/connector.py", line 906, in _create_connection
_, proto = await self._create_direct_connection(req, traces, timeout)
File "/home/***/.local/lib/python3.9/site-packages/aiohttp/connector.py", line 1153, in _create_direct_connection
hosts = await asyncio.shield(host_resolved)
RuntimeError: coroutine raised StopIterationPython Version
$ python --version
Python 3.9.7aiohttp Version
$ python -m pip show aiohttp
Name: aiohttp
Version: 3.8.0
Summary: Async http client/server framework (asyncio)
Home-page: https://github.com/aio-libs/aiohttp
Author:
Author-email:
License: Apache 2
Location: /home/***/.local/lib/python3.9/site-packages
Requires: aiosignal, async-timeout, attrs, charset-normalizer, frozenlist, multidict, yarl
Required-by:multidict Version
$ python -m pip show multidict
Name: multidict
Version: 5.1.0
Summary: multidict implementation
Home-page: https://github.com/aio-libs/multidict
Author: Andrew Svetlov
Author-email: [email protected]
License: Apache 2
Location: /home/***/.local/lib/python3.9/site-packages
Requires:
Required-by: aiohttp, grpclib, yarlyarl Version
$ python -m pip show yarl
Name: yarl
Version: 1.6.3
Summary: Yet another URL library
Home-page: https://github.com/aio-libs/yarl/
Author: Andrew Svetlov
Author-email: [email protected]
License: Apache 2
Location: /home/***/.local/lib/python3.9/site-packages
Requires: idna, multidict
Required-by: aiohttpOS
Linux
Related component
Client
Additional context
No response
Code of Conduct
- I agree to follow the aio-libs Code of Conduct
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugclientregressionSomething that used to work stopped working "as before" after upgradeSomething that used to work stopped working "as before" after upgradereproducer: presentThis PR or issue contains code, which reproduce the problem described or clearly understandable STRThis PR or issue contains code, which reproduce the problem described or clearly understandable STR