[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...