про alarm  знаю, но хочу без него.<div>все равно ведь придется враппер делать вокруг, чтоб все удобно и красиво.<br><br><div class="gmail_quote">2012/10/2 Konstantin S. Uvarin <span dir="ltr"><<a href="mailto:khedin@gmail.com" target="_blank">khedin@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Приветствую!<br>
<div class="im"><br>
> Всем привет. Я так давно работаю исключительно с AE, что совсем выпал из<br>
> темы синхронных библиотек )<br>
> Есть простейшая задача: tcp connect / host resolution / socket rw.<br>
> Но! С жестко заданным таймаутом.<br>
><br>
> Всяческие IO::Socket* могут легко заблокироваться на неограниченное время,<br>
> например на ресолве.<br>
><br>
> Есть мысль написать что-то синхронное, аналогичное AnyEvent::Socket и<br>
> AnyEvent::DNS, но с жестким контролем таймаутов.<br>
<br>
</div>А разве в AnyEvent не будет "жесткий контроль таймаутов", если написать:?<br>
<br>
  my $cv = AnyEvent->condvar;<br>
  my $timer = AnyEvent->timer(<br>
    after => $timeout,<br>
    cb => sub { $cv->croak("Timeout after $timeout seconds"); }<br>
  );<br>
  # DWIM<br>
  $cv->recv;<br>
  undef $timer;<br>
<br>
Т.е., как я понимаю, он уйдет в select, НО с таким таймаутом, чтобы успеть к<br>
ближайшему timer-у. Во всяком случае, так показывает strace.<br>
<br></blockquote><div><br></div><div class="gmail_quote"><div>Конечно-же я знаю такой способ. только с записью красивее )</div><div>my $cv = AE::cv;</div><div>my $t = ae::timer $timeout,0,sub { $cv->croak("Timeout"); }</div>
<div>tcp_connect ..., sub { $cv->send(@_) };</div></div><div>my $fh = $cv->recv;</div><div><br></div><div>Но написал-ведь: без  AE.</div><div>Предполагается потенциальное использование в любом окружении, в т.ч. и там, где может выполняться уже другой Event Loop, в том числе и AnyEvent. (А для него, если вы не в курсе, $cv->recv inside $another_cv->recv запрещен)</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Ещё вариант - IO::Select - там есть параметр timeout, который гарантирует, что<br>
блокировка будет ограничена по времени.<br>
<br></blockquote><div><br></div><div>IO::Select просто упрощенный враппер над select.</div><div><br></div><div>Ладно, я так понял, что ничего адекватного существующего нет.</div><div>Ок, ждите либу...</div><div><br></div>
</div>-- <br>Best wishes,<br>Vladimir V. Perepelitsa aka Mons Anderson<br><<a href="mailto:inthrax@gmail.com">inthrax@gmail.com</a>>, <<a href="mailto:mons@cpan.org">mons@cpan.org</a>><br><a href="http://github.com/Mons">http://github.com/Mons</a><br>

</div>