Get rid of aiodns gethostbyname() #1351
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What do these changes do?
By default aiodns function gethostbyname() (which is actually just a wrapper around c-ares function) resolve host as IPv6 address if socket family set to AF_UNSPEC(default value for TCPConnector). On the other hand ThreadedResolver use asyncio loop function getaddrinfo() which, in accordance with POSIX return both(either IPv4 and IPv6) if socket family set to AF_UNSPEC. So we have unconsistent behavior of ThreadedResolver and AsyncResolver. But c-ares lib doesn't have getaddrinfo() function, so we can't use it in aiohttp resolver. So if I use IPv4 the following simple code does not work for me(if aiodns installed of cause):
To solve this problem in method resolve() of AsyncResolver I query both types if family set to AF_UNSPEC.
Are there changes in behavior for the user?
No
Related issue number
#559
Checklist
CONTRIBUTORS.txt
CHANGES.rst
#issue_number
format at the end of changelog message. Use Pull Request number if there are no issues for PR or PR covers the issue only partially.