Now we're pretty much set for nonblocking I/O.
authorSebastian Hammer <quinn@indexdata.com>
Wed, 15 Mar 1995 08:37:40 +0000 (08:37 +0000)
committerSebastian Hammer <quinn@indexdata.com>
Wed, 15 Mar 1995 08:37:40 +0000 (08:37 +0000)
server/Makefile
server/eventl.c
server/eventl.h
server/statserv.c

index 638e835..cd2ce5a 100644 (file)
@@ -1,7 +1,7 @@
 # Copyright (C) 1994, Index Data I/S 
 # All rights reserved.
 # Sebastian Hammer, Adam Dickmeiss
-# $Id: Makefile,v 1.5 1995-03-15 08:27:15 adam Exp $
+# $Id: Makefile,v 1.6 1995-03-15 08:37:40 quinn Exp $
 
 SHELL=/bin/sh
 INCLUDE=-I../include -I. -I../asn -I../odr -I../yazlib -I../../egate/include\
@@ -19,7 +19,7 @@ PROGO=statserv.o session.o
 
 all: $(LIBDIR) $(LIB) $(PROG)
 
-$(PROG): $(LIB) $(PROGO)
+$(PROG): $(LIB) $(PROGO) pwrite.o
        $(CC) $(CFLAGS) $(LIBINCLUDE) -o $(PROG) $(PROGO) $(LIBS)
 
 alll:
index 1780a01..104088c 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: eventl.c,v $
- * Revision 1.4  1995-03-14 16:59:48  quinn
+ * Revision 1.5  1995-03-15 08:37:41  quinn
+ * Now we're pretty much set for nonblocking I/O.
+ *
+ * Revision 1.4  1995/03/14  16:59:48  quinn
  * Bug-fixes
  *
  * Revision 1.3  1995/03/14  11:30:14  quinn
@@ -78,8 +81,6 @@ int event_loop()
                continue;
            return 1;
        }
-       if (!res)
-           continue;
        for (p = iochans; p; p = nextp)
        {
            int force_event = p->force_event;
@@ -88,7 +89,7 @@ int event_loop()
            nextp = p->next;
            if (FD_ISSET(p->fd, &in) || force_event == EVENT_INPUT)
                (*p->fun)(p, EVENT_INPUT);
-           if (!p->destroyed && (FD_ISSET(p->fd, &in) ||
+           if (!p->destroyed && (FD_ISSET(p->fd, &out) ||
                 force_event == EVENT_OUTPUT))
                (*p->fun)(p, EVENT_OUTPUT);
            if (!p->destroyed && (FD_ISSET(p->fd, &except) ||
index 5c6e822..1ef43a2 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: eventl.h,v $
- * Revision 1.2  1995-03-14 10:28:00  quinn
+ * Revision 1.3  1995-03-15 08:37:42  quinn
+ * Now we're pretty much set for nonblocking I/O.
+ *
+ * Revision 1.2  1995/03/14  10:28:00  quinn
  * More work on demo server.
  *
  * Revision 1.1  1995/03/10  18:22:45  quinn
@@ -41,6 +44,8 @@ int force_event;
 #define iochan_setdata(i, d) ((i)->data = d)
 #define iochan_getflags(i) ((i)->flags)
 #define iochan_setflags(i, d) ((i)->flags = d)
+#define iochan_setflag(i, d) ((i)->flags |= d)
+#define iochan_getflag(i, d) ((i)->flags & d ? 1 : 0)
 #define iochan_getfun(i) ((i)->fun)
 #define iochan_setfun(i, d) ((i)->fun = d)
 #define iochan_setevent(i, e) ((i)->force_event = (e))
index 1ceae58..a0e9e14 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: statserv.c,v $
- * Revision 1.4  1995-03-14 16:59:48  quinn
+ * Revision 1.5  1995-03-15 08:37:45  quinn
+ * Now we're pretty much set for nonblocking I/O.
+ *
+ * Revision 1.4  1995/03/14  16:59:48  quinn
  * Bug-fixes
  *
  * Revision 1.3  1995/03/14  11:30:15  quinn
@@ -54,7 +57,8 @@ void listener(IOCHAN h, int event)
            fprintf(stderr, "cs_listen failed.\n");
            exit(1);
        }
-       iochan_setflags(h, EVENT_OUTPUT); /* set us up for accepting */
+       iochan_setevent(h, EVENT_OUTPUT);
+       iochan_setflags(h, EVENT_OUTPUT | EVENT_EXCEPT); /* set up for acpt */
     }
     else if (event == EVENT_OUTPUT)
     {
@@ -78,7 +82,7 @@ void listener(IOCHAN h, int event)
            exit(1);
        }
        iochan_setdata(new_chan, newas);
-       iochan_setflags(h, EVENT_INPUT); /* reset for listening */
+       iochan_setflags(h, EVENT_INPUT | EVENT_EXCEPT); /* reset for listen */
     }
     else
     {
@@ -141,7 +145,8 @@ void add_listener(char *where)
        perror(where);
        exit(1);
     }
-    if (!(lst = iochan_create(cs_fileno(l), listener, EVENT_INPUT)))
+    if (!(lst = iochan_create(cs_fileno(l), listener, EVENT_INPUT |
+        EVENT_EXCEPT)))
     {
        fprintf(stderr, "Failed to create IOCHAN-type\n");
        exit(1);