Пока-что рабочая версия такая:<div><br></div><div><div>DNS через Net::ADNS с собственным вызовом select'а (со своими timeout'ами)</div><div>(хотя у adns нет поддержки ipv6, так что пока только ipv4. Чую, что придется запиливать самому, если понадобится :)</div>
<div>Синтаксис практически везде стараюсь повторить AE'шный, только вместо $cb - $timeout;</div><div><br></div><div>напр:</div><div><br></div><div>my $till = time + $timeout;</div><div><br></div><div><div>my $fh = IO::Sync::Socket4::tcp_connect( "<a href="http://google.com">google.com</a>", 80, $till - time ) or die "connect failed: $!";</div>
</div><div><br></div><div>my @srv = IO::Sync::DNS::srv $service, $proto, $node, $till - time;</div><div><br></div><div>my @a = IO::Sync::DNS::a $node, $till - time;</div><div><br></div><div><br></div><div><div class="gmail_quote">
2012/10/2 Vladimir Timofeev <span dir="ltr"><<a href="mailto:vovkasm@gmail.com" target="_blank">vovkasm@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Привет!<br>
<br>
2 октября 2012 г., 12:07 пользователь Mons Anderson <<a href="mailto:mons@cpan.org">mons@cpan.org</a>> написал:<br>
<div class="im">> Всем привет. Я так давно работаю исключительно с AE, что совсем выпал из<br>
> темы синхронных библиотек )<br>
> Есть простейшая задача: tcp connect / host resolution / socket rw.<br>
> Но! С жестко заданным таймаутом.<br>
<br>
</div>Если alarm не подходит. То далее, как я понимаю проблема только в резолвинге?<br>
Тогда можно его отдельно сделать, через Net::DNS (не знаю насколько<br>
это быстро получится).<br>
<div class="im HOEnZb"><br>
><br>
> Всяческие IO::Socket* могут легко заблокироваться на неограниченное время,<br>
> например на ресолве.<br>
><br>
> Есть мысль написать что-то синхронное, аналогичное AnyEvent::Socket и<br>
> AnyEvent::DNS, но с жестким контролем таймаутов.<br>
> т.е. типа:<br>
><br>
> my $fh = tcp_connect $host,$port, $timeout or die "connect failed: $!";<br>
> my $rr = resolve in => A => "<a href="http://google.com" target="_blank">google.com</a>", $timeout or die "resolution<br>
> failed: $!";<br>
><br>
> И аналогичное AE::Handle:<br>
> my $data = $h->read( chunk => 42, $timeout ) or die "read failed: $!";<br>
><br>
> Возможно кто-то может подсказать что-то готовое и без использования AE/EV?<br>
><br>
> --<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" target="_blank">http://github.com/Mons</a><br>
><br>
><br>
</div><div class="im HOEnZb">> --<br>
> Moscow.pm mailing list<br>
> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
><br>
<br>
<br>
<br>
</div><span class="HOEnZb"><font color="#888888">--<br>
Vladimir Timofeev <<a href="mailto:vovkasm@gmail.com">vovkasm@gmail.com</a>><br>
</font></span><div class="HOEnZb"><div class="h5">--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org<br clear="all"><div><br></div>-- <br>Best wishes,<br>Vladimir V. Perepelitsa aka Mons Anderson<br>
<inthrax@gmail.com>, <mons@cpan.org><br>http://github.com/Mons<br>
<br>
</a></div></div></blockquote></div></div></div>