Re: timeout problems

Chris Devers (cdevers@go.cis.usouthal.edu)
Mon, 2 Aug 1999 14:57:16 -0500 (CDT)


We were hitting the same problem recently and found that installing the IO
module helped. Evidently LWP needs it to run, I'm not sure as I wasn't the
primary coder on that part of our project. In any event, try installing
that, referencing it as needed, and running your code again. It fixed 
everything for me & the people I'm working with...




--Chris Devers





On Mon, 2 Aug 1999, Tim Allwine wrote:

> Bruno Semrau said...
> >
> >Hello,
> >i have a problem with libwww 5.43, perl 5.005_02 and timeouts.
> >
> >i have set the UserAgent Timeout to 20 sec.
> >if i try to connect to a http server and there is a broken pipe, or the
> >server is down, then the UserAgent timeout is so long (over 5 min.), or
> >it never timeouts.
> >
> 
> I have had similar problems as have many writing to this list. I have
> seen little discussion on the issue.
> 
> Myself, before I GET or POST, I fork. The parent listens the child writes
> to the parent. I use the module Storeable to write the data back to the 
> parent.
> 
> This is a method from a module that I use to monitor web sites. The parent
> will wait for 3 minutes.
> 
> sub my_fork {
> 	my $self = shift;
> 	pipe(R,W);          # R is the reader W is the writer
> 	W->autoflush(1);
> 	$SIG{ALRM} = sub {die 'timeout'};
> 	my $pid;
> 	if ( $pid = fork) {
> 		eval {
> 			alarm 180; # 3 minutes or whatever you want
> 			close W;
> 			$self->{fork} = retrieve_fd(*R);
> 			close R;
> 			waitpid($pid,0);
> 			alarm 0;
> 		};
> 		   
> 		if ($@) {
> 			if($@ =~ /timeout/) {
> 				push(@{$self->{Log}},["Process hung. Can not connect with server. Killing pro
> 				unless( kill 2,$pid ) {
> 					kill 9,$pid;
> 				}
> 			} else {
> 				alarm 0;
> 				push(@{$self->{Log}},["Died. $@ -- Killing process $pid",1]);
> 					unless( kill 2,$pid ) {
> 					kill 9,$pid;
> 				}
> 			}
> 		} else {
> 		push(@{$self->{fork}{Log}},["Returned successfully from fork",0]);
> 		return 1;
> 		}
> 	} else {
> 		push(@{$self->{Log}},["Can not fork",1]) unless defined $pid;
> 		$self->_get();
> 		close R;
> 		store_fd($self, *W);
> 		close W;
> 		exit;
> 	}
> 	return;
> }
> 
> 
> 
> 
> -- 
> Tim Allwine
> IX Development Laboratories
> (707)-543-8030 Ext.15
> 
>