Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Andrey Sapozhnikov                   2:5020/400     09 Oct 2002  16:51:25
 To : Igor S Chencov
 Subject : Re: alarm signal problem
 -------------------------------------------------------------------------------- 
 
 Igor S Chencov wrote:
 
 > Alex Dedul <Alex.Dedul@f82.n450.z2.fidonet.org> wrote:
 > AD: Hi, All !
 > 
 > AD:         Как сделать так, чтобы после отработки сигнала ALRM выполнение
 > AD: программы продолжилось с нужного мне места ? В примере выполнение
 > подвисает AD: после $socks->connect(), вызывается обработчик сигнала и после
 > него выполнение AD: продолжает висеть где-то в нутрях Net::SOCKS. Можно ли
 > сделать чтобы после AD: обработчика был переход на следующую строку, которая
 > if($socket) ? AD:         Заранее спасибо. [[skip]] Попробуй так - $SIG{ALRM} 
 > = sub { die "alarm\n" }; eval {   alarm ($opt_timeout);   . . .   alarm(0); };
 > 
 >  if ($@ && $@ ne "alarm\n") {
 >    print "Unknow error $@" ;
 >  } elsif ($@) {
 >    print "TimeOut\n";
 >  } else {
 >    print "Ok\n";
 >  }
 
 Подобными конструкциями необходимо пользоваться с
 крайней осторожностью. Есть много подводных камней.
 Я бы рекомендовал для таймаутов сокетных операций
 использовать только IO::Select в сочетании с
 fcntl(sock, F_SETFL, O_NONBLOCK);
 
 Самые явные подводные камни, это:
 
 1. вложенные ALARM-ы. Делая
 {
      local $SIG{ALRM} = sub {...};
      alarm(30);
      Net::SOCK->new(...);
      alarm(0);
 }
 
 Вы упускаете из вида то, что в Net::SOCK
 может быть собственный alarm и обработчик сигнала.
 А ОС не поддерживает множественные алармы.
 
 2. Hереентерабельность многих библиотек и модулей.
 
 3. Hеатомарность. Кроме состояний "сокет открыт -
 таймаута нет" и "сокет не открыт - таймаут" может
 случиться состояние "сокет открыт - таймаут". Потому
 как после открытия сокета alarm сбрасывается в 0
 неатомарно.
 
 4. Windows (и некоторые другие ОС) не поддерживают
 alarm.
 
 По моему достаточно для того, чтоб задуматься об
 отказе от использования alarm за исключением редких
 вырожденных случаев.
 
 Андрей
 
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 alarm signal problem   Alex Dedul   09 Oct 2002 10:19:49 
 Re: alarm signal problem   Igor S Chencov   09 Oct 2002 14:05:22 
 Re: alarm signal problem   Andrey Sapozhnikov   09 Oct 2002 16:51:25 
 alarm signal problem   Alex Dedul   10 Oct 2002 16:27:07 
 alarm signal problem   Alex Dedul   10 Oct 2002 16:24:10 
Архивное /ru.perl/6577d9418bc3.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional