Python 2 и IPv6

Я пытаюсь включить IPv6 в приложении Python 2 и сталкиваюсь с проблемой. Каждый раз, когда я пытаюсь связать с сокетом IPv6, a 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, или являюсь мной СОЛЬ?

Подробнее: Python 2.6.2 (r262:71600, 24 октября 2009, 3:16:31) [GCC 4.4.1 [gcc-4_4-branch пересмотр 150839]] на linux2 (это - Python, это - часть стандартной установки openSUSE 11.2).

Обновление

После того, как AndiDog помог мне выяснить тот сокет. AF_INET6 определяется, даже когда IPv6 не настроен, я обнаружил socket.has_ipv6. Это определяется как булевская переменная и указывает, был ли Python сборкой с IPv6.

6
задан R Samuel Klatchko 16 January 2010 в 01:21
поделиться

3 ответа

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

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

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

4
ответ дан 10 December 2019 в 02:47
поделиться

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

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

3
ответ дан 10 December 2019 в 02:47
поделиться

Я думаю, что Facebook использует XMPP для своего чата, так что посмотрите на него.

XMPP - это

открытая технология для связи в реальном времени, которая предоставляет широкий спектр приложений, включая мгновенные сообщения, присутствие, многопартийный чат, голосовые и видеозвонки, совместную работу, облегченное промежуточное программное обеспечение, синдикацию контента и обобщенную маршрутизацию XML-данных.

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

-121--5044775-

Я не работал с выделением текста достаточно, чтобы предоставить реальную помощь, но то, что вы пытаетесь сделать, можно сделать. Вы хотите просмотреть следующие две функции:

  1. createRange () MSDN | MDC
  2. getRireAt () MDC

Я знаю, что это может быть реализовано через браузер. Вы можете увидеть некоторые из них в действии здесь:

http://fuelyourcoding.com/a-few-strategies-for-using-javascript/

Прокручивая вниз и щелкнув значок слона, который использует сценарий Evernote. Тем не менее, мой сценарий сначала выбирает основную область контента (вы увидите ее оранжевой вспышки), а затем он отменяет выбор, как только захват сделан.

Вот мини-плагин jQuery, который делает это. Он был адаптирован мной с какого-то сайта, и, как говорится в комментариях, я чувствую себя ужасно за то, что не помню. Его действительно важно отметить, что я адаптировал его к jQuery, но код пришел с какого-то сайта, где они объяснили, как это сделать:

// Adapted this from somewhere. Feel horrible for not remembering.
$.fn.autoSelect = function(){
    var selectTarget = this[0]; // Select first element from jQuery collection
    if(selectTarget != null) {
         if(selectTarget.tagName == 'TEXTAREA' || (selectTarget.tagName == "INPUT" && selectTarget.type == "text")) {
             selectTarget.select();
         } else if(window.getSelection) { // FF, Safari, Opera
             var sel = window.getSelection();
             var range = document.createRange();
             range.selectNode(selectTarget);
             sel.removeAllRanges();
             sel.addRange(range);
         } else { // IE
             document.selection.empty();
             var range = document.body.createTextRange();
             range.moveToElementText(selectTarget);
             range.select();
         };
    };
    return this; // Don't break the chain
};

Кажется, что этот сценарий находится в нескольких местах в сети, но вот еще один вариант на нем

-121--4268565-

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

2
ответ дан 10 December 2019 в 02:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: