Я пытаюсь включить 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.
Хорошо, вот ответ от комментариев :
Похоже, Python не был настроен с - Enable-IPv6
.
Это не должно быть проблемой ОС, потому что Python 3 работает. Даже если OS не имеет поддержки IPv6, кажется, что Socket.af_inet6
всегда доступно (если он определен в файлах заголовков ОС). Ср SocketModule.C , линия 4433 (в текущем исходном коде Python 2.6.4).
Похоже, что этот конкретный Python не был скомпилирован в поддержке IPv6.
В этом случае вы можете загрузить источник для этой версии и построить собой совместимый Python, который будет работать. Вы даже можете сделать редактирование в пакете Debian и обновите систему Python.
Я думаю, что Facebook использует XMPP для своего чата, так что посмотрите на него.
XMPP - это
открытая технология для связи в реальном времени, которая предоставляет широкий спектр приложений, включая мгновенные сообщения, присутствие, многопартийный чат, голосовые и видеозвонки, совместную работу, облегченное промежуточное программное обеспечение, синдикацию контента и обобщенную маршрутизацию XML-данных.
Вы устанавливаете отдельный сервер для обработки сообщений, а в приложении вы внедряете клиент с одной из доступных библиотек .
-121--5044775-Я не работал с выделением текста достаточно, чтобы предоставить реальную помощь, но то, что вы пытаетесь сделать, можно сделать. Вы хотите просмотреть следующие две функции:
Я знаю, что это может быть реализовано через браузер. Вы можете увидеть некоторые из них в действии здесь:
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, по крайней мере)...