Index: trunk/Ohana/src/opihi/pantasks/SocketOps.c
===================================================================
--- trunk/Ohana/src/opihi/pantasks/SocketOps.c	(revision 7917)
+++ trunk/Ohana/src/opihi/pantasks/SocketOps.c	(revision 7929)
@@ -30,4 +30,6 @@
   Address[0].sin_addr.s_addr = INADDR_ANY; // use this line to bind any address / port?
 
+retry_server:
+
 # if (0)  
   status = inet_aton (hostip, &Address[0].sin_addr);
@@ -49,7 +51,27 @@
   status = bind (InitSocket, (struct sockaddr *) Address, length);
   if (status == -1) {
+    fprintf (stderr, "errno: %d\n", errno);
+    fprintf (stderr, "EACCES: %d\n", EACCES);
+    fprintf (stderr, "EBADF: %d\n", EBADF);
+    fprintf (stderr, "EINVAL: %d\n", EINVAL);
+    fprintf (stderr, "ENOTSOCK: %d\n", ENOTSOCK);
+    fprintf (stderr, "EFAULT: %d\n", EFAULT);
+    fprintf (stderr, "ELOOP: %d\n", ELOOP);
+    fprintf (stderr, "ENAMETOOLONG: %d\n", ENAMETOOLONG);
+    fprintf (stderr, "ENOENT: %d\n", ENOENT);
+    fprintf (stderr, "ENOMEM: %d\n", ENOMEM);
+    fprintf (stderr, "ENOTDIR: %d\n", ENOTDIR);
+    fprintf (stderr, "EROFS: %d\n", EROFS);
+
+    Address[0].sin_port ++;
+    if (Address[0].sin_port > MY_PORT + 10) exit (2);
+    fprintf (stderr, "trying next port: %d\n", Address[0].sin_port);
+    goto retry_server;
+
     perror ("bind: ");
     exit (2);
   }
+  /* repeated starts of the server are limited by xinetd or something:
+     requires 60sec timeout of the selected socket */
 
   status = listen (InitSocket, 10);
@@ -140,4 +162,6 @@
   Address.sin_family = AF_INET;
   Address.sin_port   = MY_PORT;
+
+retry_client:
   status = inet_aton (hostip, &Address.sin_addr);
   if (!status) {
@@ -156,4 +180,10 @@
   status = connect (InitSocket, (struct sockaddr *) &Address, length);
   if (status == -1) {
+    if (errno == ECONNREFUSED) {
+      Address.sin_port ++;
+      if (Address.sin_port > MY_PORT + 10) exit (2);
+      fprintf (stderr, "trying next port: %d\n", Address.sin_port);
+      goto retry_client;
+    }
     perror ("connect: ");
     exit (2);
