--- loncom/lonnet/perl/lonnet.pm 2004/10/05 11:24:34 1.549 +++ loncom/lonnet/perl/lonnet.pm 2004/10/06 09:48:39 1.550 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.549 2004/10/05 11:24:34 foxr Exp $ +# $Id: lonnet.pm,v 1.550 2004/10/06 09:48:39 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -52,6 +52,7 @@ use Apache::lonlocal; use Storable qw(lock_store lock_nstore lock_retrieve freeze thaw); use Time::HiRes qw( gettimeofday tv_interval ); my $readit; +my $max_connection_retries = 10; # Or some such value. =pod @@ -126,16 +127,30 @@ sub subreply { sleep(1); } # At this point, either a loncnew parent is listening or an old lonc - # or loncnew child is listening so we can connect. + # or loncnew child is listening so we can connect or everything's dead. # - my $client=IO::Socket::UNIX->new(Peer =>"$peerfile", - Type => SOCK_STREAM, - Timeout => 10) - or return "con_lost"; - print $client "$cmd\n"; - my $answer=<$client>; - if (!$answer) { $answer="con_lost"; } - chomp($answer); + # We'll give the connection a few tries before abandoning it. If + # connection is not possible, we'll con_lost back to the client. + # + my $client; + for (my $retries = 0; $retries < $max_connection_retries; $retries++) { + $client=IO::Socket::UNIX->new(Peer =>"$peerfile", + Type => SOCK_STREAM, + Timeout => 10); + if($client) { + last; # Connected! + } + sleep(1); # Try again later if failed connection. + } + my $answer; + if ($client) { + print $client "$cmd\n"; + $answer=<$client>; + if (!$answer) { $answer="con_lost"; } + chomp($answer); + } else { + $answer = 'con_lost'; # Failed connection. + } return $answer; }