Issue33678
Created on 2018-05-29 09:43 by sebastien.bourdeauducq, last changed 2022-04-11 14:59 by admin.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| test.py | apatrushev, 2018-07-26 14:11 | |||
| issue33678.patch | augustogoulart, 2018-11-07 00:33 | |||
| Pull Requests | |||
|---|---|---|---|
| URL | Status | Linked | Edit |
| PR 11403 | closed | twisteroid ambassador, 2019-01-02 11:23 | |
| PR 11403 | closed | twisteroid ambassador, 2019-01-02 11:23 | |
| Messages (7) | |||
|---|---|---|---|
| msg318001 - (view) | Author: Sebastien Bourdeauducq (sebastien.bourdeauducq) * | Date: 2018-05-29 09:43 | |
The current behavior causes an exception to be raised when trying to create a datagram socket and _ipaddr_info returns None (since asyncio then calls loop.getaddrinfo with SOCK_STREAM and IPPROTO_UDP). Preserving socket type is made difficult by https://bugs.python.org/issue21327; the proposed patch includes a dirty workaround. I do not know yet if it works on Windows. --- selector_events.py 2018-05-11 10:01:42.011164837 +0800 +++ selector_events.py.new 2018-05-29 17:41:03.103155480 +0800 @@ -439,8 +439,9 @@ raise ValueError("the socket must be non-blocking") if not hasattr(socket, 'AF_UNIX') or sock.family != socket.AF_UNIX: + socktype = sock.type & 0xf # WA https://bugs.python.org/issue21327 resolved = base_events._ensure_resolved( - address, family=sock.family, proto=sock.proto, loop=self) + address, family=sock.family, type=socktype, proto=sock.proto, loop=self) if not resolved.done(): yield from resolved _, _, _, _, address = resolved.result()[0] |
|||
| msg318002 - (view) | Author: Sebastien Bourdeauducq (sebastien.bourdeauducq) * | Date: 2018-05-29 09:50 | |
Windows looks fine. |
|||
| msg318047 - (view) | Author: Yury Selivanov (yselivanov) * ![]() |
Date: 2018-05-29 15:45 | |
Can you write a unittest that exposes the bug? |
|||
| msg322429 - (view) | Author: Anton Patrushev (apatrushev) | Date: 2018-07-26 14:11 | |
I created small script showing the error. |
|||
| msg329399 - (view) | Author: Augusto Goulart (augustogoulart) * | Date: 2018-11-07 00:33 | |
This error seems to come from base_events.py, lines 142-145, and since it's an OS specific limitation, I can't see Sebastien's suggestion as a feasible solution. Maybe we could come up with something along the lines of the following patch. What do you think about it? diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py index 3726c556d4..15ee4d9d1b 100644 --- a/Lib/asyncio/base_events.py +++ b/Lib/asyncio/base_events.py @@ -142,6 +142,9 @@ def _ipaddr_info(host, port, family, type, proto): if '%' in host: # Linux's inet_pton doesn't accept an IPv6 zone index after host, # like '::1%lo0'. + if sys.platform.startswith('linux'): + return OSError("Linux's inet_pton doesn't accept an IPv6 " + "zone index after host") return None for af in afs: diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py index 6d544d1eda..1b944ff89e 100644 --- a/Lib/test/test_asyncio/test_base_events.py +++ b/Lib/test/test_asyncio/test_base_events.py @@ -109,6 +109,9 @@ class BaseEventTests(test_utils.TestCase): self.assertIsNone( base_events._ipaddr_info('::3', 1, INET, STREAM, TCP)) + @unittest.skipIf(sys.platform.startswith('linux'), + "Linux's inet_pton doesn't accept an IPv6 zone index after host") + def test_for(self): # IPv6 address with zone index. self.assertIsNone( base_events._ipaddr_info('::3%lo0', 1, INET6, STREAM, TCP)) |
|||
| msg332405 - (view) | Author: twisteroid ambassador (twisteroid ambassador) * | Date: 2018-12-24 04:12 | |
Looks like this bug is also cause by using _ensure_resolved() more than once for a given host+port, so it can probably be fixed together with https://bugs.python.org/issue35545 . Masking sock.type should not be necessary anymore since https://bugs.python.org/issue32331 fixed it. |
|||
| msg369967 - (view) | Author: Cheryl Sabella (cheryl.sabella) * ![]() |
Date: 2020-05-26 10:23 | |
For reference, please note the comments in https://github.com/python/cpython/pull/11403#issuecomment-633779644. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022-04-11 14:59:01 | admin | set | github: 77859 |
| 2020-05-26 10:23:45 | cheryl.sabella | set | nosy:
+ cheryl.sabella messages: + msg369967 |
| 2019-01-02 11:23:43 | twisteroid ambassador | set | stage: patch review pull_requests: + pull_request10791 |
| 2019-01-02 11:23:30 | twisteroid ambassador | set | stage: (no value) pull_requests: + pull_request10790 |
| 2018-12-24 04:12:14 | twisteroid ambassador | set | nosy:
+ twisteroid ambassador messages: + msg332405 |
| 2018-11-07 00:33:30 | augustogoulart | set | files:
+ issue33678.patch nosy:
+ taleinat, augustogoulart keywords: + patch |
| 2018-07-26 14:11:57 | apatrushev | set | files:
+ test.py versions: + Python 3.7 nosy: + apatrushev messages: + msg322429 |
| 2018-05-29 15:45:28 | yselivanov | set | messages: + msg318047 |
| 2018-05-29 09:50:16 | sebastien.bourdeauducq | set | messages: + msg318002 |
| 2018-05-29 09:43:27 | sebastien.bourdeauducq | create | |
