Я не знаком с кодом, но с этой строки в XML :: Stream модуль начинает цикл select (). Строка 523-524 - это место, где IO :: Select передает сокет на целевой сервер, а IO :: Select сам передает благословенную ссылку, которая никогда не должна быть неопределенной так, как ее использует XML :: Stream.
Что-то, вероятно, изменяет элемент «SELECT» объекта XML :: Stream в модулях Jabber, возможно, в результате ошибочной попытки исправить ошибку соединения с сервером. Мне жаль, что я не могу быть более конкретным.
В ответ на обновление:
Это странные ошибки, и я все равно хотел заглянуть внутрь модулей Jabber, поэтому я взглянул на источник. Следующее основано на просмотре последних версий используемых модулей, доступных из CPAN. Это, вероятно, не очень полезно, если вы не хотите создавать подклассы этих модулей и добавлять код, чтобы увидеть, где происходит что-то неожиданное. (Вы можете пропустить следующий абзац, если вас не интересует внутреннее устройство модулей Jabber.)
По обновленной информации я проследил его до точки, где Authen :: SASL :: Perl хрипит в строке 41. Ему нужен результат от механизма $ parent->, и есть две возможные причины, если предположить, что Authen :: SASL не не сломано. Либо он вызывается неправильно без аргументов из Net :: XMPP :: Protocol (строка 2968), что кажется маловероятным, либо не существует «механизмов», установленных в конструкторе для Authen :: SASL. Net :: XMPP :: Protocol определяет «механизмы» (вызывается GetStreamFeature, строка 2958; этот метод определен в строке 3340) с помощью return $self->{STREAM}->GetStreamFeature($self->GetStreamID(),$feature);
, где $ feature - это просто строка, переданная от вызываемого объекта и часть идентификатора XML :: Stream. сеанс объекта.
Исходя из исходной ошибки XML и вероятности сбоя идентификатора сеанса, кажется, что сервер либо отправляет неверные данные в какой-то момент неожиданно для XML :: Stream и не учитывается модулями, использующими его. Я не уверен, что foo%[email protected] - правильный формат имени пользователя, но я не знаю, как это могло вызвать эти ошибки, если сервер Jabber не делает что-то неправильно.
Я бы начал все сначала с другими именами пользователей на другом сервере и посмотрел, работает ли Jabber :: SimpleSend вообще, а затем попытался бы каким-то образом захватить вывод сервера, чтобы увидеть, что XML :: Stream задыхается.
Обновление. Как бы то ни было, я установил модуль и получаю точно такие же ошибки. Authen :: SASL :: Perl :: PLAIN и все другие предварительные условия существуют. И когда я установил имя пользователя на [email protected] и включил глобальные предупреждения (например, #! / Usr / bin / perl -w или perl -w filename.pl), XML :: Stream выдает кучу неопределенных значения, и SimpleSend фактически выплевывает предупреждение «Не удалось подключиться к серверу Jabber»! (Нет, я не знаю, что это на самом деле означает :().
Обновление: Я пытался установить Net :: Jabber :: Bot (я отказался от некоторых ошибок модуля ssl), чтобы посмотреть, решит ли он что-нибудь, и я заметил, что его конструктор имеет эту опцию и примечание:
gtalk => 0 # Default to off, 1 for on. needed now due to gtalk differences from std jabber server.
что подтверждает идею о том, что сервер делает что-то необычное, для чего XML :: Stream не создает исключения.
person
Anonymous
schedule
29.04.2009