--- loncom/Attic/lonc 1999/12/22 17:18:04 1.4
+++ loncom/Attic/lonc 2000/02/08 17:34:24 1.5
@@ -11,7 +11,8 @@
# USR1 tries to open connections again
# 6/4/99,6/5,6/7,6/8,6/9,6/10,6/11,6/12,7/14,7/19,
-# 10/8,10/9,10/15,11/18,12/22 Gerd Kortemeyer
+# 10/8,10/9,10/15,11/18,12/22,
+# 2/8 Gerd Kortemeyer
# based on nonforker from Perl Cookbook
# - server who multiplexes without forking
@@ -24,6 +25,8 @@ use Fcntl;
use Tie::RefHash;
use Crypt::IDEA;
+$childmaxattempts=10;
+
# ------------------------------------ Read httpd access.conf and get variables
open (CONFIG,"/etc/httpd/conf/access.conf") || die "Can't read access.conf";
@@ -61,7 +64,8 @@ sub REAPER { # ta
$SIG{CHLD} = \&REAPER;
my $pid = wait;
my $wasserver=$children{$pid};
- &logthis("Child $pid for server $wasserver died");
+ &logthis(
+ "CRITICAL: Child $pid for server $wasserver died");
delete $children{$pid};
delete $childpid{$wasserver};
my $port = "$perlvar{'lonSockDir'}/$wasserver";
@@ -73,14 +77,14 @@ sub HUNTSMAN { # si
kill 'INT' => keys %children;
my $execdir=$perlvar{'lonDaemons'};
unlink("$execdir/logs/lonc.pid");
- &logthis("Shutting down");
+ &logthis("CRITICAL: Shutting down");
exit; # clean up with dignity
}
sub HUPSMAN { # signal handler for SIGHUP
local($SIG{CHLD}) = 'IGNORE'; # we're going to kill our children
kill 'INT' => keys %children;
- &logthis("Restarting");
+ &logthis("CRITICAL: Restarting");
my $execdir=$perlvar{'lonDaemons'};
exec("$execdir/lonc"); # here we go again
}
@@ -98,6 +102,7 @@ sub USRMAN {
# -------------------------------------------------- Non-critical communication
sub subreply {
my ($cmd,$server)=@_;
+ my $answer='';
if ($server ne $perlvar{'lonHostID'}) {
my $peerfile="$perlvar{'lonSockDir'}/$server";
my $sclient=IO::Socket::UNIX->new(Peer =>"$peerfile",
@@ -147,7 +152,7 @@ $execdir=$perlvar{'lonDaemons'};
open (PIDSAVE,">$execdir/logs/lonc.pid");
print PIDSAVE "$$\n";
close(PIDSAVE);
-&logthis("---------- Starting ----------");
+&logthis("CRITICAL: ---------- Starting ----------");
# ----------------------------- Ignore signals generated during initial startup
$SIG{HUP}=$SIG{USR1}='IGNORE';
@@ -173,7 +178,11 @@ while (1) {
# See who died and start new one
foreach $thisserver (keys %hostip) {
if (!$childpid{$thisserver}) {
- if ($childatt{$thisserver}<5) {
+ if ($childatt{$thisserver}<=$childmaxattempt) {
+ my $ainfoatt=1*$childatt{$thisserver};
+ &logthis(
+ "INFO: Trying to reconnect for $thisserver "
+ ."($ainfoatt of $childmaxattempts attempts)");
make_new_child($thisserver);
$childatt{$thisserver}++;
}
@@ -221,8 +230,11 @@ unless (
PeerPort => $perlvar{'londPort'},
Proto => "tcp",
Type => SOCK_STREAM)
- ) { &logthis("Couldn't connect $conserver: $@");
- sleep(5);
+ ) {
+ my $st=120+int(rand(240));
+ &logthis(
+"WARNING: Couldn't connect $conserver ($st secs): $@");
+ sleep($st);
exit;
};
# --------------------------------------- Send a ping to make other end do USR1
@@ -251,7 +263,12 @@ my $cipherkey=pack("H32",$key);
if ($cipher=new IDEA $cipherkey) {
&logthis("Secure connection inititalized: $conserver");
} else {
- &logthis("Error: Could not establish secure connection, $conserver!");
+ my $st=120+int(rand(240));
+ &logthis(
+ "WARNING: ".
+ "Could not establish secure connection, $conserver ($st secs)!");
+ sleep($st);
+ exit;
}
# ----------------------------------------- We're online, send delayed messages
@@ -301,13 +318,20 @@ unless (
$server = IO::Socket::UNIX->new(Local => $port,
Type => SOCK_STREAM,
Listen => 10 )
- ) { &logthis("Can't make server socket $conserver: $@");
- sleep(5);
+ ) {
+ my $st=120+int(rand(240));
+ &logthis(
+ "WARNING: ".
+ "Can't make server socket $conserver ($st secs): $@");
+ sleep($st);
exit;
};
# -----------------------------------------------------------------------------
+&logthis("$conserver online");
+
+# -----------------------------------------------------------------------------
# begin with empty buffers
%inbuffer = ();
%outbuffer = ();