Changed include/yaz/diagbib1.h and added include/yaz/diagsrw.h with
[yaz-moved-to-github.git] / src / unix.c
index 1d2b925..3449001 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (C) 1995-2005, Index Data ApS
  * See the file LICENSE for details.
  *
- * $Id: unix.c,v 1.10 2005-01-17 10:29:00 adam Exp $
+ * $Id: unix.c,v 1.14 2005-02-09 09:18:27 adam Exp $
  * UNIX socket COMSTACK. By Morten Bøgeskov.
  */
 /**
@@ -22,6 +22,9 @@
 #if HAVE_UNISTD_H
 #include <unistd.h>
 #endif
+#if HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
 #include <fcntl.h>
 #include <signal.h>
 
@@ -30,9 +33,6 @@
 #include <pwd.h>
 #endif
 
-#if HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
 #if HAVE_SYS_STAT_H
 #include <sys/stat.h>
 #endif
@@ -152,6 +152,7 @@ COMSTACK unix_type(int s, int blocking, int protocol, void *vp)
     p->event = CS_NONE;
     p->cerrno = 0;
     p->stackerr = 0;
+    p->user = 0;
 
     state->altbuf = 0;
     state->altsize = state->altlen = 0;
@@ -312,6 +313,7 @@ static int unix_connect(COMSTACK h, void *address)
 {
     struct sockaddr_un *add = (struct sockaddr_un *)address;
     int r;
+    int i;
 
     TRC(fprintf(stderr, "unix_connect\n"));
     h->io_pending = 0;
@@ -320,14 +322,28 @@ static int unix_connect(COMSTACK h, void *address)
        h->cerrno = CSOUTSTATE;
        return -1;
     }
-    r = connect(h->iofile, (struct sockaddr *) add, SUN_LEN(add));
+    for (i = 0; i<3; i++)
+    {
+       r = connect(h->iofile, (struct sockaddr *) add, SUN_LEN(add));
+       if (r < 0 && yaz_errno() == EAGAIN)
+       {
+#if HAVE_USLEEP
+           usleep(i*10000+1000); /* 1ms, 11ms, 21ms */
+#else
+           sleep(1);
+#endif
+           continue;
+       }
+       else
+           break;
+    }
     if (r < 0)
     {
        if (yaz_errno() == EINPROGRESS)
        {
            h->event = CS_CONNECT;
            h->state = CS_ST_CONNECTING;
-           h->io_pending = CS_WANT_WRITE|CS_WANT_READ;
+           h->io_pending = CS_WANT_WRITE;
            return 1;
        }
        h->cerrno = CSYSERR;
@@ -404,7 +420,7 @@ static int unix_bind(COMSTACK h, void *address, int mode)
     }
     chown(path, sp->uid, sp->gid);
     chmod(path, sp->umask != -1 ? sp->umask : 0666);
-    if (mode == CS_SERVER && listen(h->iofile, 3) < 0)
+    if (mode == CS_SERVER && listen(h->iofile, 100) < 0)
     {
        h->cerrno = CSYSERR;
        return -1;