Fixed bug regarding inetd mode.
[yaz-moved-to-github.git] / server / statserv.c
index 458f664..2af20bf 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995-2000, Index Data
+ * Copyright (c) 1995-2001, Index Data
  * See the file LICENSE for details.
  * Sebastian Hammer, Adam Dickmeiss
  *
@@ -7,7 +7,18 @@
  *   Chas Woodfield, Fretwell Downing Informatics.
  *
  * $Log: statserv.c,v $
- * Revision 1.67  2000-11-23 10:58:32  adam
+ * Revision 1.70  2001-02-01 08:52:26  adam
+ * Fixed bug regarding inetd mode.
+ *
+ * Revision 1.69  2000/12/01 17:56:41  adam
+ * on WIN32 function statserv_closedown closes socket(s) to provoke close.
+ *
+ * Revision 1.68  2000/11/29 14:22:47  adam
+ * Implemented XML/SGML attributes for data1 so that d1_read reads them
+ * and d1_write generates proper attributes for XML/SGML records. Added
+ * register locking for threaded version.
+ *
+ * Revision 1.67  2000/11/23 10:58:32  adam
  * SSL comstack support. Separate POSIX thread support library.
  *
  * Revision 1.66  2000/10/06 12:00:28  adam
@@ -416,6 +427,7 @@ void statserv_closedown()
             {
                 /* Just destroy the IOCHAN, that should do the trick */
                 iochan_destroy(pCurrentThread->pIOChannel);
+                closesocket(pCurrentThread->pIOChannel->fd);
 
                 /* Keep a running count of our handles */
                 iHandles++;
@@ -445,6 +457,7 @@ void statserv_closedown()
         /* Now we can really do something */
         if (iHandles > 0)
         {
+            logf (LOG_LOG, "waiting for %d to die", iHandles);
             /* This will now wait, until all the threads close */
             WaitForMultipleObjects(iHandles, pThreadHandles, TRUE, INFINITE);
 
@@ -714,13 +727,11 @@ static void *new_session (void *vp)
 
     if (mask)    
     {
-       yaz_log (LOG_LOG, "new_session , accept incomplete");
        cs_accept_mask = mask;  /* accept didn't complete */
        cs_get_mask = 0;
     }
     else
     {
-       yaz_log (LOG_LOG, "new_session , accept complete");
        cs_accept_mask = 0;     /* accept completed.  */
        cs_get_mask = mask = EVENT_INPUT;
     }
@@ -774,6 +785,7 @@ static void inetd_connection(int what)
                 iochan_settimeout(chan, control_block.idle_timeout * 60);
                 addr = cs_addrstr(line);
                 yaz_log(LOG_LOG, "Inetd association from %s", addr ? addr : "[UNKNOWN]");
+               assoc->cs_get_mask = EVENT_INPUT;
             }
             else
             {