[LON-CAPA-cvs] cvs: loncom / loncnew

foxr lon-capa-cvs@mail.lon-capa.org
Tue, 15 Jul 2003 02:07:05 -0000


foxr		Mon Jul 14 22:07:05 2003 EDT

  Modified files:              
    /loncom	loncnew 
  Log:
  Added code for lonc/lond transaction timeouts.  Who knows if it works right.
  The intent is for a timeout to fail any transaction in progress and kill
  off the sockt that timed out.
  
  
Index: loncom/loncnew
diff -u loncom/loncnew:1.14 loncom/loncnew:1.15
--- loncom/loncnew:1.14	Wed Jul  2 22:10:18 2003
+++ loncom/loncnew	Mon Jul 14 22:07:05 2003
@@ -2,7 +2,7 @@
 # The LearningOnline Network with CAPA
 # lonc maintains the connections to remote computers
 #
-# $Id: loncnew,v 1.14 2003/07/03 02:10:18 foxr Exp $
+# $Id: loncnew,v 1.15 2003/07/15 02:07:05 foxr Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -27,7 +27,7 @@
 # http://www.lon-capa.org/
 #
 #
-# new lonc handles n requestors spread out bver m connections to londs.
+# new lonc handles n request out bver m connections to londs.
 # This module is based on the Event class.
 #   Development iterations:
 #    - Setup basic event loop.   (done)
@@ -46,6 +46,11 @@
 
 # Change log:
 #    $Log: loncnew,v $
+#    Revision 1.15  2003/07/15 02:07:05  foxr
+#    Added code for lonc/lond transaction timeouts.  Who knows if it works right.
+#    The intent is for a timeout to fail any transaction in progress and kill
+#    off the sockt that timed out.
+#
 #    Revision 1.14  2003/07/03 02:10:18  foxr
 #    Get all of the signals to work correctly.
 #
@@ -286,6 +291,21 @@
 
 =pod
 
+=head 2 SocketTimeout
+
+    Called when an action on the socket times out.  The socket is 
+   destroyed and any active transaction is failed.
+
+
+=cut
+sub SocketTimeout {
+    my $Socket = shift;
+    
+    KillSocket($Socket);
+}
+
+=pod
+
 =head2 Tick
 
 Invoked  each timer tick.
@@ -310,7 +330,13 @@
     } else {
 	$IdleSeconds = 0;	# Reset idle count if not idle.
     }
-
+    #
+    #  For each inflight transaction, tick down its timeout counter.
+    #
+    foreach $item (keys %ActiveTransactions) {
+	my $Socket = $ActiveTransactions{$item}->getServer();
+	$Socket->Tick();
+    }
     # Do we have work in the queue, but no connections to service them?
     # If so, try to make some new connections to get things going again.
     #
@@ -448,6 +474,12 @@
 		
 	    } else {		# Partial string sent.
 		$Watcher->data(substr($Data, $result));
+		if($result == 0) {    # client hung up on us!!
+		    Log("INFO", "lonc pipe client hung up on us!");
+		    $Watcher->cancel;
+		    $Socket->shutdown(2);
+		    $Socket->close();
+		}
 	    }
 	    
 	} else {			# Error of some sort...