[Moscow.pm] AnyEvent::DNS
Михаил Монашёв
postmaster на softsearch.ru
Ср Июл 9 12:34:50 PDT 2008
Здравствуйте.
#! /usr/bin/perl
use strict;
use warnings;
use AnyEvent::DNS;
my $resolver = AnyEvent::DNS->new(timeout => [2], server =>
[AnyEvent::Socket::parse_address('127.0.0.201')]);
my $cv = AnyEvent->condvar();
my $resolve_sub = sub {
warn "mindmix.ru resolved\n";
};
$resolver->resolve('mindmix.ru', 'a', accept => ["a"], $resolve_sub);
my $timer = AnyEvent->timer(
after => 1,
cb => sub {
warn "timeout for mindmix.ru\n";
$cv->send();
}
);
$cv->recv();
undef $timer;
undef $resolver;
undef $resolve_sub;
undef $cv;
$resolver = AnyEvent::DNS->new(timeout => [2], server =>
[AnyEvent::Socket::parse_address('127.0.0.201')]);
$cv = AnyEvent->condvar();
my $resolve_sub2 = sub {
warn "beon.ru resolved\n";
};
$resolver->resolve('beon.ru', 'a', accept => ["a"], $resolve_sub2);
$timer = AnyEvent->timer(
after => 3,
cb => sub {
warn "timeout for beon.ru\n";
$cv->send();
}
);
$cv->recv();
Этот скрипт выдаёт:
timeout for mindmix.ru
mindmix.ru resolved
beon.ru resolved
timeout for beon.ru
Хотя не должен выдавать "mindmix.ru resolved" , ибо оно должно было
прекратить резолвится по таймауту. Автор модуля настоятельно
рекомендует купить книжку по перлу утверждает, что
undef $resolver;
никак не влияет на работу модуля и вотчеры продолжают свою работу
дальше. Хотя это очень странно. По идее сработал таймаут и ничего
после таймаута продолжать работать не должно.
Посему вопрос: как переписать код, чтобы при резолвинге второго хоста
не происходил резолвинг первого?
--
С уважением,
Михаил Монашёв, SoftSearch.ru
mailto:postmaster на softsearch.ru
ICQ# 166233339
http://michael.mindmix.ru/
Без бэкапа по жизни.
Подробная информация о списке рассылки Moscow-pm