[Moscow.pm] Sync networking w timeouts
Konstantin S. Uvarin
khedin на gmail.com
Вт Окт 2 01:30:13 PDT 2012
Приветствую!
> Всем привет. Я так давно работаю исключительно с AE, что совсем выпал из
> темы синхронных библиотек )
> Есть простейшая задача: tcp connect / host resolution / socket rw.
> Но! С жестко заданным таймаутом.
>
> Всяческие IO::Socket* могут легко заблокироваться на неограниченное время,
> например на ресолве.
>
> Есть мысль написать что-то синхронное, аналогичное AnyEvent::Socket и
> AnyEvent::DNS, но с жестким контролем таймаутов.
А разве в AnyEvent не будет "жесткий контроль таймаутов", если написать:?
my $cv = AnyEvent->condvar;
my $timer = AnyEvent->timer(
after => $timeout,
cb => sub { $cv->croak("Timeout after $timeout seconds"); }
);
# DWIM
$cv->recv;
undef $timer;
Т.е., как я понимаю, он уйдет в select, НО с таким таймаутом, чтобы успеть к
ближайшему timer-у. Во всяком случае, так показывает strace.
Ещё вариант - IO::Select - там есть параметр timeout, который гарантирует, что
блокировка будет ограничена по времени.
--
WBR,
Konstantin S. Uvarin
Подробная информация о списке рассылки Moscow-pm