我有一個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()
已經做的選擇。