我試圖在Python 2應用程序中啓用IPv6,並且遇到了麻煩。無論何時我嘗試綁定到IPv6套接字,都會引發一個socket.error: getsockaddrarg: bad family
異常。我可以簡單地做重現錯誤:Python 2和IPv6
import socket
s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
s.bind(('', 12345))
此代碼工作正常,如果我在Python 3運行。不幸的是,劇本需要一個顯著的移植工作在Python 3工作,我寧願沒有這樣做那呢。
我需要做些什麼來獲得IPv6在Python 2中的工作還是我S-O-L?
詳情: 的Python 2.6.2(r262:71600,2009年10月24日,3時16分31秒) [GCC 4.4.1 [GCC-4_4-分支修訂150839]在linux2上 (這是Python的那標準openSUSE 11.2安裝的一部分)。
更新
後AndiDog幫我弄清楚,socket.AF_INET6定義沒有配置IPv6的即使,我發現socket.has_ipv6
。這被定義爲一個布爾值並指示Python是否使用IPv6構建。
運行在FreeBSD上的Python 2.6.1沒有問題。 – sberry 2010-01-15 23:19:29
它可以在*非常相同的操作系統或另一個操作系統上使用Python 3嗎? – AndiDog 2010-01-15 23:22:22
@AndiDog - 是的,它可以在同一個操作系統上運行在Python 3上。在一個shell(如此相同的環境)中,如果我運行'python2。/ script',我得到異常,然後如果我運行'python3。/ script',我不會。 – 2010-01-15 23:26:37