|
|
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
|