--- loncom/Attic/lonc 2003/07/25 01:16:29 1.52 +++ loncom/Attic/lonc 2003/10/24 16:36:14 1.56 @@ -5,7 +5,7 @@ # provides persistent TCP connections to the other servers in the network # through multiplexed domain sockets # -# $Id: lonc,v 1.52 2003/07/25 01:16:29 bowersj2 Exp $ +# $Id: lonc,v 1.56 2003/10/24 16:36:14 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -124,7 +124,7 @@ close(CONFIG); %childatt = (); # number of attempts to start server # for ID -$childmaxattempts=5; +$childmaxattempts=15; # ---------------------------------------------------- Fork once and dissociate &status("Fork and dissociate"); @@ -361,13 +361,17 @@ while (1) { # accept a new connection &status("Accept new connection: $conserver"); $client = $server->accept(); - if($DEBUG) { - &logthis("New client fd = ".$client->fileno."\n"); + if (!$client) { + &logthis("Got stupid nonexisent client on ".$server->fileno." $conserver \n"); + } else { + if($DEBUG) { + &logthis("New client fd = ".$client->fileno."\n"); + } + $servers{$client->fileno} = $client; + nonblock($client); + $client->sockopt(SO_KEEPALIVE, 1); # Enable monitoring of + # connection liveness. } - $servers{$client->fileno} = $client; - nonblock($client); - $client->sockopt(SO_KEEPALIVE, 1);# Enable monitoring of - # connection liveness. } HandleInput($infdset, \%servers, \%inbuffer, \%outbuffer, \%ready); HandleOutput($outfdset, \%servers, \%outbuffer, \%inbuffer, @@ -638,7 +642,7 @@ sub handle { $request="enc:$cmdlength:$encrequest"; } # --------------------------------------------------------------- Main exchange - $answer = londtransaction($remotesock, $request, 300); + $answer = londtransaction($remotesock, $request, 60); if($DEBUG) { &logthis(" Request data exchange complete"); @@ -707,7 +711,7 @@ sub openremote { my $st=120+int(rand(240)); # Sleep before opening: unless ( - $remotesock = IO::Socket::INET->new(PeerAddr => $hostip{$conserver}, + $remotesock = IO::Socket::INET->new(PeerAddr => $hostname{$conserver}, PeerPort => $perlvar{'londPort'}, Proto => "tcp", Type => SOCK_STREAM) @@ -759,8 +763,7 @@ sub openremote { sleep 5; &status("Ponging $conserver"); - print $remotesock "pong\n"; - $answer=<$remotesock>; + $answer= londtransaction($remotesock,"pong",60); chomp($answer); if ($answer!~/^$conserver/) { &logthis("Pong reply: >$answer<"); @@ -768,8 +771,7 @@ sub openremote { # ----------------------------------------------------------- Initialize cipher &status("Initialize cipher"); - print $remotesock "ekey\n"; - my $buildkey=<$remotesock>; + my $buildkey=londtransaction($remotesock,"ekey",60); my $key=$conserver.$perlvar{'lonHostID'}; $key=~tr/a-z/A-Z/; $key=~tr/G-P/0-9/; @@ -990,12 +992,12 @@ sub londtransaction { alarm(0); }; } else { - &logthis("lonc - suiciding on send Timeout"); - die("lonc - suiciding on send Timeout"); + &logthis("lonc - $conserver - suiciding on send Timeout"); + die("lonc - $conserver - suiciding on send Timeout"); } if ($@ =~ /timeout/) { - &logthis("lonc - suiciding on read Timeout"); - die("lonc - suiciding on read Timeout"); + &logthis("lonc - $conserver - suiciding on read Timeout"); + die("lonc - $conserver - suiciding on read Timeout"); } # # Restore the initial sigmask set.