Python 2 и IPv6 - PullRequest
       22

Python 2 и IPv6

6 голосов
/ 16 января 2010

Я пытаюсь включить 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.

Ответы [ 3 ]

4 голосов
/ 16 января 2010

Хорошо, вот ответ из комментариев:

Похоже, Python не был настроен с --enable-ipv6.

Это не должно быть проблемой ОС, потому что Python 3 работает. Даже если ОС не поддерживает IPv6, кажется, что socket.AF_INET6 всегда доступен (если он определен в заголовочных файлах ОС). Ср socketmodule.c , строка 4433 (в текущем исходном коде Python 2.6.4).

3 голосов
/ 16 января 2010

Похоже, что этот конкретный Python не был скомпилирован с поддержкой IPv6.

В этом случае вы можете скачать исходный код для этой версии и создать себе совместимый Python, который будет работать. Возможно, вы даже сможете отредактировать пакет Debian и обновить системный питон.

2 голосов
/ 16 января 2010

Прекрасно работает с 2.6.4 на моем Mac (Mac OS X 10.5.8) - и, к сожалению, я не могу перейти на 2.6.2, и при этом у меня нет openSUSE, чтобы проверить, откуда именно эта ошибка.Не могли бы вы попробовать получить версию 2.6.4 и сборку из исходных кодов, чтобы проверить, исчезла ли ошибка, или проверить какой-нибудь специфичный для openSUSE трекер ошибок ...?По крайней мере, мы знаем, что это не общая ошибка Python 2.6 (по крайней мере, с последней исправленной версией 2.6) ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...