[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