Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AnyEvent и TLS 
:(
    Опции темы
slavenk
Дата 29.7.2013, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TheAthlete
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.10.2009

Репутация: нет
Всего: нет



Здравствуйте!
При запуске вот такого кода:
 
Код

#!/usr/bin/perl -w
use strict;
 
use utf8;
use feature 'say';
 
use AnyEvent;
use EV;
use AnyEvent::HTTP;
 
my $cv = AnyEvent->condvar;
 
http_get 'https://metacpan.org/module/AnyEvent::HTTP', sub {
  my ($body, $hdr) = @_;
 
  if ($hdr->{Status} =~ /^2/) {
    say 'Yes';
  } else {
    say "error, $hdr->{Status} $hdr->{Reason}";
  }
  $cv->send;
 
};
 
$cv->recv;

 
выдается следующая ошибка:
 
Yes
        (in cleanup) Can't call method "_put_session" on an undefined value at /usr/local/lib64/perl5/AnyEvent/Handle.pm line 2163 during global destruction.

Подскажите пожайлуста, в чем может быть проблема?
PM MAIL ICQ Skype   Вверх
arto
Дата 29.7.2013, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



tls контекст отсутствует, как я понимаю.
посмотреите, как реализовано в AnyEvent::TLS.
PM MAIL ICQ   Вверх
slavenk
Дата 29.7.2013, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TheAthlete
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.10.2009

Репутация: нет
Всего: нет



Попробовал так реализовать, не получилось

Код

http_get 'https://metacpan.org/module/AnyEvent::HTTP', 
  tls_ctx => { verify => 1, verify_peername => 'https' },
  sub {
    my ($body, $hdr) = @_;

    if ($hdr->{Status} =~ /^2/) {
      #say $body;
      say 'Yes';
    } else {
      say "error, $hdr->{Status} $hdr->{Reason}";
    }
    $cv->send;

  };


PM MAIL ICQ Skype   Вверх
slavenk
Дата 29.7.2013, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TheAthlete
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.10.2009

Репутация: нет
Всего: нет



Может быть проблема в том, что рекомендуемая версия Net::SSLeay 1.35, а у меня 1.55?

AnyEvent::TLS
Цитата

Although this module does not require a specific version of Net::SSLeay, many features will gradually stop working, or bugs will be introduced with old versions (verification might succeed when it shouldn't - this is a real security issue). Version 1.35 is recommended, 1.33 should work, 1.32 might, and older versions are yours to keep.

PM MAIL ICQ Skype   Вверх
arto
Дата 30.7.2013, 07:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



не думаю.
PM MAIL ICQ   Вверх
slavenk
Дата 30.7.2013, 10:56 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


TheAthlete
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.10.2009

Репутация: нет
Всего: нет



Проблему решил - не нужно использовать ключ -w в первой строке. Лучше писать use warnings;
PM MAIL ICQ Skype   Вверх
arto
Дата 30.7.2013, 12:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



мусор под ковёр? неплохо, неплохо smile
PM MAIL ICQ   Вверх
slavenk
Дата 31.7.2013, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TheAthlete
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.10.2009

Репутация: нет
Всего: нет



не совсем так - здесь особенность работы с глобальными деструкторами в Perl. 

Вот что написал Marc Lehmann по этому поводу:
 
First of all, you are using -w. This switch forces a set of warnings
on every piece of code, even code that doesn't want or need those
warnings. If you run with -w, and you get warnings, you have to deal
with them: the original aithor did not enable them, so when you do, you
effectively take over maintainership.
 
So netter don't run with -w if you don't want to deal with warnings in
other people's code.
 
Second, this is a bug in perl - during global destruction, perl can
randomly corrupt data structures, which sometimes causes messages like
these.

Это поведение документировано: Global Destruction , поэтому это не баг, а фича
PM MAIL ICQ Skype   Вверх
ginnie
Дата 31.7.2013, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



slavenk, больше похоже на особенность некоторых разработчиков сваливать вину на всех, кроме себя. Тут явная ошибка в коде. Можно ее исправить, а можно сделать вид, что ее нет  smile 
P.S. пару лет назад имел "удовольствие" пообщаться с Марком по поводу ошибок в AnyEvent, после этого пользуюсь чистым EV.

Это сообщение отредактировал(а) ginnie - 31.7.2013, 15:21


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
arto
Дата 31.7.2013, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



"You should check that a contained object is defined before calling a method on it"

и 

   $self->{tls_ctx}->_put_session (delete $self->{tls})
      if $self->{tls} > 0;

не сочетается. А в связи с индивидуальными особенностями лехмана,
вряд-ли будет пофиксена в ближайшем будущем.
PM MAIL ICQ   Вверх
slavenk
Дата 31.7.2013, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TheAthlete
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 22.10.2009

Репутация: нет
Всего: нет



Цитата(ginnie @  31.7.2013,  15:20 Найти цитируемый пост)
P.S. пару лет назад имел "удовольствие" пообщаться с Марком по поводу ошибок в AnyEvent, после этого пользуюсь чистым EV.

Кстати, этот Лехман также автор EV
PM MAIL ICQ Skype   Вверх
ginnie
Дата 31.7.2013, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Цитата(slavenk @  31.7.2013,  15:38 Найти цитируемый пост)
Кстати, этот Лехман также автор EV

А я и не говорил, что модулями Марка не стоит пользоваться. В EV я ошибок пока не нашел, поэтому пользуюсь. Я писал про особенности общения с ним, а также про его желание что-либо исправлять.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
ginnie
Дата 31.7.2013, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Кстати, ошибка не такая уж и безобидная, насколько я понимаю, после нее уже остальные деструкторы в коде не вызываются.
Был неправ:
Цитата

If your DESTROY method throws an error, this error will be ignored. It will not be sent to STDERR and it will not cause the program to die. However, if your destructor is running inside an eval {} block, then the error will change the value of $@.


Это сообщение отредактировал(а) ginnie - 31.7.2013, 16:14


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0788 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.