Author: Kev <klmitch@mit.edu>
[ircu2.10.12-pk.git] / ircd / engine_poll.c
index 192998c5c4bc069d4df69f11669f0c2557abb22d..b5ca2c7d498a622d5381683511cf469242ee9bf4 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 struct pollfd* pollfdList;
 static unsigned int poll_count;
@@ -310,6 +303,17 @@ engine_loop(struct Generators* gen)
        }
       }
 
+      assert(!(pollfdList[i].revents & POLLERR));
+
+#ifdef POLLHUP
+      if (pollfdList[i].revents & POLLHUP) { /* hang-up on socket */
+       Debug((DEBUG_ENGINE, "poll: EOF from client (POLLHUP)"));
+       event_generate(ET_EOF, sock, 0);
+       nfds--;
+       continue;
+      }
+#endif /* POLLHUP */
+
       switch (s_state(sock)) {
       case SS_CONNECTING:
        if (pollfdList[i].revents & POLLWRITEFLAGS) { /* connect completed */