col*_*Two 8 python sockets networking ipv6
我试图运行这个非常基本的套接字示例:
import socket
host = 'ipv6hostnamegoeshere'
port=9091
ourSocket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM, 0)
ourSocket.connect((host, port))
Run Code Online (Sandbox Code Playgroud)
然而,我得到错误:
ourSocket.connect((host, port))
File "<string>", line 1, in connect
socket.error: [Errno 22] Invalid argument
Run Code Online (Sandbox Code Playgroud)
布尔值has_ipv6返回true.有帮助吗?
vz0*_*vz0 15
正如socket.connect文档所说,AF_INET6期望一个4元组:
sockaddr是一个描述套接字地址的元组,其格式取决于返回的族(AF_INET的(地址,端口)2元组,AF_INET6的(地址,端口,流信息,范围ID)4元组),并且是意味着传递给socket.connect()方法.
例如:
>>> socket.getaddrinfo("www.python.org", 80, 0, 0, socket.SOL_TCP)
[(2, 1, 6, '', ('82.94.164.162', 80)),
(10, 1, 6, '', ('2001:888:2000:d::a2', 80, 0, 0))]
>>> ourSocket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM, 0)
>>> ourSocket.connect(('2001:888:2000:d::a2', 80, 0, 0))
Run Code Online (Sandbox Code Playgroud)