python - 如何将 asyncio create_connection 用于 IPv6 地址?
问题描述
在我的代码中,我尝试使用 asyncio create_connection 连接以使客户端连接到 TCP 服务器。出于某种原因,当我尝试使用 IPv4 地址时连接成功:
event_loop.create_connection(client_factory, host='127.0.0.1', port=8190)
但是当我使用 IPv6 地址时连接失败:
event_loop.create_connection(client_factory, host='::1', port=8190)
当我使用 IPv6 环回地址时,我得到一个 OSError:
Traceback (most recent call last):
File "C:\Users\<removed>\AppData\Local\Programs\Python\Python36\lib\asyncio\base_events.py", line 778, in create_connection
raise exceptions[0]
File "C:\Users\<removed>\AppData\Local\Programs\Python\Python36\lib\asyncio\base_events.py", line 765, in create_connection
yield from self.sock_connect(sock, address)
File "C:\Users\<removed>\AppData\Local\Programs\Python\Python36\lib\asyncio\proactor_events.py", line 451, in sock_connect
return self._proactor.connect(sock, address)
File "C:\Users\<removed>\AppData\Local\Programs\Python\Python36\lib\asyncio\windows_events.py", line 511, in connect
ov.ConnectEx(conn.fileno(), address)
OSError: [WinError 10022] An invalid argument was supplied
查看文档,看起来family
create_connection 的参数默认为socket.AF_UNSPEC
. 我还通过指定家庭尝试了相同的调用:
event_loop.create_connection(client_factory, host='::1', port=8190, family=socket.AF_INET6)
但我得到相同的结果。我知道将主机设置为'localhost'
将适用于此示例,但我想知道如何将任何 IPv6 地址用于create_connection
.
解决方案
推荐阅读
- r - 如何在空间上对物种出现数据的 data.frames 列表进行稀疏化?
- visual-studio - Visual Studio 2019 - 某些配置不会更新平台
- css - React 组件未使用 linaria 进行动画处理
- node.js - 码头工人 npm 安装 ERR
- javascript - 下一个未处理的运行时错误。未找到路由器实例
- java - 如何定义控制器方法以接受具有 Spring Boot 归档的媒体类型的 JSON?
- docker - 在 docker-compose.yml 中添加“extra_hosts”的更好方法
- android - 无法从 android Q 中的 Google Nearby Connections API 访问下载的文件
- python - 如何使我的代码从一行移动到之前发生的另一行?
- javascript - React-Native:如何在顶部栏上添加一个图标来制作 popToTop?