[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