Index: trunk/Ohana/src/opihi/pcontrol/StartHost.c
===================================================================
--- trunk/Ohana/src/opihi/pcontrol/StartHost.c	(revision 4689)
+++ trunk/Ohana/src/opihi/pcontrol/StartHost.c	(revision 4705)
@@ -1,3 +1,4 @@
 # include "pcontrol.h"
+# define RETRY_BASE 1.0
 
 int StartHost (Host *host) {
@@ -6,6 +7,6 @@
   int stdio[3];
   char command[64], shell[64];
-
-  /* pid = rconnect (CONNECT, host[0].hostname, PCLIENT, stdio); */
+  struct timeval now;
+  float delta;
 
   /* perhaps change the name of these config variables... */
@@ -14,9 +15,26 @@
 
   pid = rconnect (command, host[0].hostname, shell, stdio);
-  if (!pid) {     /** failure to start **/
+  if (!pid) {     
+    /** failure to start: extend retry period **/
     if (VerboseMode()) fprintf (stderr, "failure to start %s\n", host[0].hostname);
+    gettimeofday (&now, (void *) NULL);
+    if (ZTIME(host[0].nexttry) || ZTIME(host[0].lasttry)) {
+      /* reset retry period if either is zero */
+      delta = RETRY_BASE;
+    } else {
+      delta = 2*DTIME (host[0].nexttry, host[0].lasttry);
+    }
+    host[0].nexttry.tv_sec  = now.tv_sec  + delta;
+    host[0].nexttry.tv_usec = now.tv_usec;
+    host[0].lasttry.tv_sec  = now.tv_sec;
+    host[0].lasttry.tv_usec = now.tv_usec;
     PutHost (host, PCONTROL_HOST_DOWN, STACK_BOTTOM);
     return (FALSE);
   }
+  host[0].nexttry.tv_sec  = 0;
+  host[0].nexttry.tv_usec = 0;
+  host[0].lasttry.tv_sec  = 0;
+  host[0].lasttry.tv_usec = 0;
+
   host[0].stdin  = stdio[0];
   host[0].stdout = stdio[1];
