Added support for multi-homed YAZ frontend server. A backend config
[yaz-moved-to-github.git] / src / eventl.c
index 6fa5b98..649e6de 100644 (file)
@@ -1,8 +1,8 @@
 /*
- * Copyright (c) 1995-2004, Index Data
+ * Copyright (C) 1995-2005, Index Data ApS
  * See the file LICENSE for details.
  *
- * $Id: eventl.c,v 1.2 2004-10-15 00:19:00 adam Exp $
+ * $Id: eventl.c,v 1.7 2005-02-01 14:46:47 adam Exp $
  */
 
 /**
  * Server. It uses select(2).
  */
 
-#include <stdio.h>
 #include <assert.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
 #ifdef WIN32
 #include <winsock.h>
-#else
+#endif
+#if HAVE_UNISTD_H
 #include <unistd.h>
 #endif
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
+#if HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
 
 #include <yaz/yconfig.h>
 #include <yaz/log.h>
 #define YAZ_EV_SELECT select
 #endif
 
-IOCHAN iochan_create(int fd, IOC_CALLBACK cb, int flags)
+static int log_level=0;
+static int log_level_initialized=0;
+
+IOCHAN iochan_create(int fd, IOC_CALLBACK cb, int flags, int port)
 {
     IOCHAN new_iochan;
 
+    if (!log_level_initialized)
+    {
+        log_level=yaz_log_module_level("eventl");
+        log_level_initialized=1;
+    }
+
     if (!(new_iochan = (IOCHAN)xmalloc(sizeof(*new_iochan))))
        return 0;
     new_iochan->destroyed = 0;
@@ -54,6 +74,7 @@ IOCHAN iochan_create(int fd, IOC_CALLBACK cb, int flags)
     new_iochan->force_event = 0;
     new_iochan->last_event = new_iochan->max_idle = 0;
     new_iochan->next = NULL;
+    new_iochan->port = port;
     return new_iochan;
 }
 
@@ -81,7 +102,7 @@ int event_loop(IOCHAN *iochans)
        for (p = *iochans; p; p = p->next)
        {
             time_t w, ftime;
-            yaz_log(LOG_DEBUG, "fd=%d flags=%d force_event=%d",
+            yaz_log(log_level, "fd=%d flags=%d force_event=%d",
                     p->fd, p->flags, p->force_event);
            if (p->force_event)
                 to.tv_sec = 0;          /* polling select */
@@ -104,9 +125,9 @@ int event_loop(IOCHAN *iochans)
                     to.tv_sec = w;
             }
        }
-        yaz_log(LOG_DEBUG, "select start %ld", (long) to.tv_sec);
+        yaz_log(log_level, "select start %ld", (long) to.tv_sec);
        res = YAZ_EV_SELECT(max + 1, &in, &out, &except, &to);
-        yaz_log(LOG_DEBUG, "select end");
+        yaz_log(log_level, "select end");
        if (res < 0)
        {
            if (yaz_errno() == EINTR)
@@ -127,7 +148,7 @@ int event_loop(IOCHAN *iochans)
                 cs_close(conn);
                destroy_association(assoc);
                iochan_destroy(*iochans);
-                yaz_log(LOG_DEBUG, "error select, destroying iochan %p",
+                yaz_log(log_level, "error select, destroying iochan %p",
                        *iochans);
             }
        }