Diff for /loncom/Attic/lonc between versions 1.4 and 1.5

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

Removed from v.1.4  
changed lines
  Added in v.1.5


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>