[Moscow.pm] Sync networking w timeouts

Vladimir V. Perepelitsa inthrax на gmail.com
Вт Окт 2 01:34:51 PDT 2012


про alarm  знаю, но хочу без него.
все равно ведь придется враппер делать вокруг, чтоб все удобно и красиво.

2012/10/2 Konstantin S. Uvarin <khedin на gmail.com>

> Приветствую!
>
> > Всем привет. Я так давно работаю исключительно с 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.
>
>
Конечно-же я знаю такой способ. только с записью красивее )
my $cv = AE::cv;
my $t = ae::timer $timeout,0,sub { $cv->croak("Timeout"); }
tcp_connect ..., sub { $cv->send(@_) };
my $fh = $cv->recv;

Но написал-ведь: без  AE.
Предполагается потенциальное использование в любом окружении, в т.ч. и там,
где может выполняться уже другой Event Loop, в том числе и AnyEvent. (А для
него, если вы не в курсе, $cv->recv inside $another_cv->recv запрещен)


> Ещё вариант - IO::Select - там есть параметр timeout, который гарантирует,
> что
> блокировка будет ограничена по времени.
>
>
IO::Select просто упрощенный враппер над select.

Ладно, я так понял, что ничего адекватного существующего нет.
Ок, ждите либу...

-- 
Best wishes,
Vladimir V. Perepelitsa aka Mons Anderson
<inthrax на gmail.com>, <mons на cpan.org>
http://github.com/Mons
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20121002/806570f2/attachment.html>


Подробная информация о списке рассылки Moscow-pm