Index: trunk/Ohana/src/opihi/pcontrol/rconnect.c
===================================================================
--- trunk/Ohana/src/opihi/pcontrol/rconnect.c	(revision 4705)
+++ trunk/Ohana/src/opihi/pcontrol/rconnect.c	(revision 4762)
@@ -1,5 +1,6 @@
 # include "pcontrol.h"
 
-# define CONNECT_TIMEOUT 300
+/* connection can take a while, allow up to 2 sec */
+# define CONNECT_TIMEOUT 200
 
 /* connect to host, start the shell: ssh hostname pclient -> command hostname shell
@@ -15,4 +16,5 @@
   char **argv;
   IOBuffer buffer;
+  struct timespec request, remain;
 
   bzero (stdin_fd,  2*sizeof(int));
@@ -79,5 +81,5 @@
     status = ReadtoIOBuffer (&buffer, stdout_fd[0]);
     p = memstr (buffer.buffer, "CONNECTED", buffer.Nbuffer);
-    usleep (20000);
+    usleep (10000);
   }
   if (status == 0) goto connect_error;
@@ -101,9 +103,13 @@
   if (VerboseMode()) fprintf (stderr, "error while connecting\n");
 
+  /* avoid blocking on waitpid, test every 100 usec, up to 50 msec */
+  request.tv_sec = 0;
+  request.tv_nsec = 100000;
+
   /* harvest the child process: kill & wait (< 100 ms) for exit */
   kill (pid, SIGKILL);
   result = waitpid (pid, &waitstatus, WNOHANG);
-  for (i = 0; (i < 10) && (result == 0); i++) {
-    usleep (10000);  /* 10 ms is min */
+  for (i = 0; (i < 50) && (result == 0); i++) {
+    nanosleep (&request, &remain);
     result = waitpid (pid, &waitstatus, WNOHANG);
   }
