===================================================================
RCS file: /home/cvs/OpenXM/src/kan96xx/plugin/mytcpio.c,v
retrieving revision 1.7
retrieving revision 1.16
diff -u -p -r1.7 -r1.16
--- OpenXM/src/kan96xx/plugin/mytcpio.c	2002/10/20 07:58:18	1.7
+++ OpenXM/src/kan96xx/plugin/mytcpio.c	2005/07/03 11:08:54	1.16
@@ -1,11 +1,13 @@
-/*  $OpenXM: OpenXM/src/kan96xx/plugin/mytcpio.c,v 1.6 2002/02/24 10:27:20 takayama Exp $ */
+/*  $OpenXM: OpenXM/src/kan96xx/plugin/mytcpio.c,v 1.15 2004/11/23 05:28:19 takayama Exp $ */
 #include <stdio.h>
+#include <string.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/time.h>
 #include <netinet/in.h>
 #include <netdb.h>
 #include <setjmp.h>
+#include <errno.h>
 /* -lnsl -lsocket /usr/ucblib/libucb.a */
 #include "ox_kan.h"
 /* 
@@ -38,11 +40,10 @@ socketOpen(char *serverName,int portNumber) {
   static struct sockaddr_in me;
   static int s_waiting;
   static int on;
-  extern int errno;
   int tt;
 
   SET_TCPIOERROR;
-  fprintf(TcpioError,"Hello from open. serverName is %s and portnumber is %d\n",
+  if (!Quiet) fprintf(TcpioError,"Hello from open. serverName is %s and portnumber is %d\n",
           serverName,portNumber);
   if ((myhost = gethostbyname(serverName)) == NULL) {
     errorMsg1s("Bad server name.");
@@ -78,7 +79,7 @@ socketOpen(char *serverName,int portNumber) {
     errorMsg1s("Listen failed");
     return(-1);
   }
-  fprintf(TcpioError,"Done the initialization. port =%d\n",ntohs(me.sin_port));
+  if (!Quiet) fprintf(TcpioError,"Done the initialization. port =%d\n",ntohs(me.sin_port));
   OpenedSocket = ntohs(me.sin_port);
   return(s_waiting);
 }
@@ -89,12 +90,16 @@ socketAccept(int snum) {
     
   SET_TCPIOERROR;
   s = snum;
-  fprintf(TcpioError,"Trying to accept... "); fflush(TcpioError);
+  if (!Quiet) {fprintf(TcpioError,"Trying to accept... "); fflush(TcpioError);}
   if ((news = accept(s,NULL,NULL)) < 0) {
-    errorMsg1s("Error in accept.");
-    return(-1);
+    errorMsg1s("Error in accept. Retrying (socketAccept).");
+    /* Code added for strange behavior on cygwin. */
+    if ((news = accept(s,NULL,NULL)) < 0) {
+      errorMsg1s("Error in accept. Retry failed.");
+      return (-1);
+    }
   }
-  fprintf(TcpioError,"Accepted.\n"); fflush(TcpioError);
+  if (!Quiet) {fprintf(TcpioError,"Accepted.\n"); fflush(TcpioError);}
   if (close(s) < 0) {
     errorMsg1s("Error in closing the old socket.");
     return(-1);
@@ -110,23 +115,27 @@ socketAcceptLocal(int snum) {
 
   SET_TCPIOERROR;
   s = snum;
-  fprintf(TcpioError,"Trying to accept from localhost... "); fflush(TcpioError);
+  if (!Quiet) {fprintf(TcpioError,"Trying to accept from localhost... "); fflush(TcpioError);}
   len = sizeof(struct sockaddr);
   if ((news = accept(s,&peer,&len)) < 0) {
-    errorMsg1s("Error in accept.");
-    return(-1);
+    errorMsg1s("Error in accept. Retrying");
+    /* Code added for strange behavior on cygwin. */
+   if ((news = accept(s,&peer,&len)) < 0) {
+      errorMsg1s("Error in accept. Retry failed.");
+      return (-1);
+   }
   }
 
   len = sizeof(struct sockaddr);
   getpeername(news,&peer,&len);
-  printf("len= %d\n",len);
+  if (!Quiet) printf("len= %d\n",len);
   for (i=0; i<len; i++) {
-    printf(" %x ",peer.sa_data[i]);
+    if (!Quiet) printf(" %x ",peer.sa_data[i]);
   }
-  printf("\n");
+  if (!Quiet) printf("\n");
   if (peer.sa_data[2] == 0x7f && peer.sa_data[3] == 0 &&
       peer.sa_data[4] == 0    && peer.sa_data[5] == 1) {
-    fprintf(stderr,"Authentication: localhost is allowed to be accepted.\n");
+    if (!Quiet) fprintf(stderr,"Authentication: localhost is allowed to be accepted.\n");
   }else{
     errorMsg1s("Authentication: The connection is not from the localhost.");
     close(s);
@@ -134,7 +143,7 @@ socketAcceptLocal(int snum) {
     return(-1);
   }
 
-  fprintf(TcpioError,"Accepted.\n"); fflush(TcpioError);
+  if (!Quiet) {fprintf(TcpioError,"Accepted.\n"); fflush(TcpioError);}
   if (close(s) < 0) {
     errorMsg1s("Error in closing the old socket.");
     return(-1);
@@ -142,11 +151,50 @@ socketAcceptLocal(int snum) {
   return(news);
 }
 
+/* It does not close the socket for listening. */
+socketAcceptLocal2(int snum) {
+  int s, news;
+  struct sockaddr peer;
+  int len;
+  int i;
+
+  SET_TCPIOERROR;
+  s = snum;
+  if (!Quiet) {fprintf(TcpioError,"Trying to accept from localhost... "); fflush(TcpioError);}
+  len = sizeof(struct sockaddr);
+  if ((news = accept(s,&peer,&len)) < 0) {
+    errorMsg1s("Error in accept. Retrying (socketAcceptLocal2).");
+    /* Code added for strange behavior on cygwin. */
+    if ((news = accept(s,&peer,&len)) < 0) {
+      errorMsg1s("Error in accept. Retry failed.");
+      return (-1);
+    }
+  }
+
+  len = sizeof(struct sockaddr);
+  getpeername(news,&peer,&len);
+  if (!Quiet) printf("len= %d\n",len);
+  for (i=0; i<len; i++) {
+    if (!Quiet) printf(" %x ",peer.sa_data[i]);
+  }
+  if (!Quiet) printf("\n");
+  if (peer.sa_data[2] == 0x7f && peer.sa_data[3] == 0 &&
+      peer.sa_data[4] == 0    && peer.sa_data[5] == 1) {
+    if (!Quiet) fprintf(stderr,"Authentication: localhost is allowed to be accepted.\n");
+  }else{
+    errorMsg1s("Authentication: The connection is not from the localhost.");
+    fprintf(stderr,"The connection is refused.");
+    return(-1);
+  }
+
+  if (!Quiet) {fprintf(TcpioError,"Accepted.\n"); fflush(TcpioError);}
+  return(news);
+}
+
 int oxSocketSelect0(int fd,int t) {
   fd_set readfds;
   struct timeval timeout;
   int debug = 0;
-  extern int errno;
   SET_TCPIOERROR;
   FD_ZERO(&readfds);
   FD_SET(fd,&readfds);
@@ -178,7 +226,6 @@ oxSocketMultiSelect(int sid[],int size,int t,int resul
   fd_set readfds;
   struct timeval timeout;
   int isdata = 0;
-  extern errno;
 
   SET_TCPIOERROR;
   FD_ZERO(&readfds);
@@ -263,6 +310,8 @@ socketConnectWithPass(char *servername,int port,char *
   int m;
   SET_TCPIOERROR;
   fd = socketConnect(servername,port);
+  if ((pass == NULL) && (fd >= 0)) return fd;
+  if ((pass == NULL) && (fd < 0)) return -1;
   if (fd >= 0) {
     m = write(fd,pass,strlen(pass)+1);
     if (m != strlen(pass)+1) {