|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Elias Sergueeff 2:5020/400 15 May 2003 20:57:24 To : All Subject : IO::Socket & timeout -------------------------------------------------------------------------------- Hello, All! Есть задачка... Почитал в инете, вроде все просто... Попробовал - не работает. Поднимите мне брови! В общен читаю нечто с сервера. Hадо как то организовать ... в общем если долго нет ответа, то прекратить читать. С чего нижеследующее всегда помирает по таймауту? use IO::Socket; use IO::Select; my $socket = IO::Socket::INET->new(PeerAddr => $server, PeerPort => $port, Proto => 'tcp', Type => SOCK_STREAM TimeOut => $timeout); my $select = IO::Select->new($connect); binmode $socket; # это убирал, не помогло $socket->autoflush(1); # это убирал, не помогло unless ( $select->can_read( 100 ) ) { die "Timeout\n"; }; Или оно так и задумано? А вот так, Будет работать? : (я пробовал... не совсем так, в общем не получилось, но отзывы были что данный вариант - работает.) eval { local $SIG{__DIE__} = 'DEFAULT'; local $SIG{__ALRM__} = sub { die 'timeout!' }; alarm(10); defined(recv(...)) or die "recv failed: $!"; alarm(0); }; alarm(0); if ($@ =~ /^timeout!/) { # timeout ... } elsif ($@ =~ /^recv failed:/) { # recv error ... } elsif ($@) # unexpected eval error ... } Я еще нарыл... примерчик такой... мааааленький. Hа пару страниц. Говорят он умеет таймауты ловить при чтении. WBR, Ilja --- ifmail v.2.15dev5 * Origin: MTU-Intel ISP (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/910447123b8f.html, оценка из 5, голосов 10
|