Author: Kev <klmitch@mit.edu>
[ircu2.10.12-pk.git] / ircd / engine_devpoll.c
index 8bd9c75511708b0c454d96e0846d22b35b6ace4d..ece113a0a8ecb6c5ef63c917d17586cd63e7cea8 100644 (file)
 #  define POLLWRITEFLAGS POLLWRNORM
 #endif
 
-/* Figure out what bits indicate errors */
-#ifdef POLLHUP
-#  define POLLERRORS (POLLHUP|POLLERR)
-#else
-#  define POLLERRORS POLLERR
-#endif
-
 static struct Socket** sockList;
 static int devpoll_max;
 static int devpoll_fd;
@@ -318,6 +311,17 @@ engine_loop(struct Generators* gen)
        }
       }
 
+      assert(!(polls[i].revents & POLLERR));
+
+#ifdef POLLHUP
+      if (polls[i].revents & POLLHUP) { /* hang-up on socket */
+       Debug((DEBUG_ENGINE, "devpoll: EOF from client (POLLHUP)"));
+       event_generate(ET_EOF, sock, 0);
+       nfds--;
+       continue;
+      }
+#endif /* POLLHUP */
+
       switch (s_state(sock)) {
       case SS_CONNECTING:
        if (polls[i].revents & POLLWRITEFLAGS) { /* connection completed */