|
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) Вернуться к списку тем, сортированных по:
Архивное /ru.cgi.perl/45933ebfed0b.html, оценка из 5, голосов 10
|