Я пытаюсь включить IPv6 в приложении Python 2, и у меня возникли проблемы. Всякий раз, когда я пытаюсь подключиться к сокету IPv6, выдается исключение socket.error: getsockaddrarg: bad family
. Я могу воспроизвести ошибку, просто выполнив:
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, 24 октября 2009 г., 03:16:31)
[GCC 4.4.1 [gcc-4_4-branch revision 150839]] на linux2
(это Python, который является частью стандартной установки openSUSE 11.2).
Обновление
После того, как AndiDog помог мне выяснить, что socket.AF_INET6 определяется, даже если IPv6 не настроен, я обнаружил socket.has_ipv6
. Это определяется как логическое значение и указывает, был ли Python собран с IPv6.