我有一个python应用程序需要为IPv6连接选择特定的本地源地址,但可以使用“any”0.0.0.0作为IPv4连接。但是应用程序使用socket.connect((host, port))
中的主机名来允许socket.connect()
从名称中进行地址查找。将IPv4和IPv6源地址绑定到python套接字
那么,如何结合具体的报文的源地址和IPv4“任何”地址到本地套接字因为我不知道以前socket.connect()
,称为IPv4地址或IPv6地址是否将导致从名都抬头?
现在我有一个异常处理它socket.EAI_ADDRFAMILY
这样:
try:
sock.bind(("2601:a2a0:a0aa:1d00:aeaa:aaff:aa6c:aaab",0))
sock.connect((host, port))
except socket.gaierror, e:
if e[0] == socket.EAI_ADDRFAMILY:
sock.bind(("0.0.0.0",0))
sock.connect((host, port))
当然,但也不能保证在异常处理器socket.connect()
将解析主机到IPv4地址仅仅因为以前socket.connect()
没有。
必须有更好的方法。我怀疑这将是我必须自己实施地址查找和选择,并将地址,而不是名称socket.connect()
。这样我就会知道当我在做我的本地地址绑定时,无论是socket.connect()
将使用IPv4还是IPv6。但是我不得不重新实现名称解析和socket.connect()
已经做的选择。