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


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Ruslan Sulemanov                     2:4635/1024.27 12 May 2003  18:46:04
 To : All
 Subject : таймаут
 -------------------------------------------------------------------------------- 
 
 
      Ребята помогите разобраться:
 
            имеем:
                 for(yсловие)
                     {
 
                        @doc=&connect_to_internet($url1,....);
                        # основной код проги
                     }
 
     надо сделать что-то вроде таймаyта для всей процедyры,
     так как для некоторых URL коннект виснет и непонятно почемy....
     Тоесть надо как-то поставить таймер поистечению которого
     переходить к следyющей интерации...
     Какие бyдyт предложения?
     Заранее благодарен.
 --------------------------- // ----------------------------------
  sub connect_to_internet
       {
   use Socket;
   undef $url;
   undef $url1;
   local @url=shift @_;
   my $maxsz=shift @_;
   my $time_out=shift @_;
          local $url1=$url[0];
                  undef $protocol;
    undef $remote_host;
    undef $doc;
    undef $port;
                  undef @sockdata;
                         $url1=~m,^(https|http)://([^\:]+)(?::(\d+))?(/\S*)?$,i;
           $protocol = $1;
           $remote_host = $2 || return 666;
    $port = $3 || 80;
    $doc = $4 || "/";
    undef *SOCK;
    $remote_host=~s/^\s*//;
    $remote_host=~s/\s*$//;
    $doc=~s/^\s*//;
    $doc=~s/\s*$//;
    socket(SOCK,PF_INET,SOCK_STREAM,getprotobyname('tcp')) || return 666;
    $inet_addr=gethostbyname($remote_host) || return 666;
    $paddr=sockaddr_in($port,$inet_addr) || return 666;
    # bind(SOCK,$paddr) || return 666;
    connect(SOCK,$paddr) || return 666;
    select(SOCK);
    $|=1;
    select(STDOUT);
    print SOCK "GET $doc HTTP/1.1\r\n";
    print SOCK "Host: $remote_host\n";
    print SOCK "User-Agent: MSIE 5.01\n";
    print SOCK "\n";
    my $cosize;
       $cosize=0;
    local $SIG{ALRM}=sub { return 666; };
    eval {
    alarm($time_out);
    while($line=<SOCK>)
     {
     $cosize+=length($line);
     if($cosize > $maxsz)
         {
         return 666;
         }
     push(@sockdata,$line);
     }
    alarm(0);
    };
    close(SOCK);
   return @sockdata;
       }
      С Уважением, Руслан.
 
 --- GoldED+/FreeBSD 4.8-STABLE
  * Origin: *JEET:* support@icu.net.ua *:UA* (2:4635/1024.27)
 
 

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

 Тема:    Автор:    Дата:  
 таймаут   Ruslan Sulemanov   12 May 2003 18:46:04 
 таймаут   Ivan Frolcov   12 May 2003 20:29:09 
 таймаут   Ruslan Sulemanov   12 May 2003 21:53:03 
 Re: таймаут   Artem Chuprina   14 May 2003 17:20:25 
 Re: таймаут   Andrey Sapozhnikov   14 May 2003 17:30:38 
 таймаут   Alexander Kostiuchenko   24 May 2003 17:00:14 
Архивное /ru.cgi.perl/45933ebfed0b.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional