Преглед изворни кода

internal_add_connection: refuse blocking sockets in epoll mode

Evgeny Grin (Karlson2k) пре 5 година
родитељ
комит
e58fbba00a
1 измењених фајлова са 16 додато и 3 уклоњено
  1. 16 3
      src/microhttpd/daemon.c

+ 16 - 3
src/microhttpd/daemon.c

@@ -2404,9 +2404,8 @@ internal_add_connection (struct MHD_Daemon *daemon,
   }
   }
 #endif
 #endif
 
 
-  if ( (! MHD_SCKT_FD_FITS_FDSET_ (client_socket,
-                                   NULL)) &&
-       (0 == (daemon->options & (MHD_USE_POLL | MHD_USE_EPOLL))) )
+  if ( (0 == (daemon->options & (MHD_USE_POLL | MHD_USE_EPOLL))) &&
+       (! MHD_SCKT_FD_FITS_FDSET_ (client_socket, NULL)) )
   {
   {
 #ifdef HAVE_MESSAGES
 #ifdef HAVE_MESSAGES
     MHD_DLOG (daemon,
     MHD_DLOG (daemon,
@@ -2415,6 +2414,20 @@ internal_add_connection (struct MHD_Daemon *daemon,
               (int) FD_SETSIZE);
               (int) FD_SETSIZE);
 #endif
 #endif
     MHD_socket_close_chk_ (client_socket);
     MHD_socket_close_chk_ (client_socket);
+#if ENFILE
+    errno = ENFILE;
+#endif
+    return MHD_NO;
+  }
+
+  if ( (0 == (daemon->options & MHD_USE_EPOLL)) &&
+       (! non_blck) )
+  {
+#ifdef HAVE_MESSAGES
+    MHD_DLOG (daemon,
+              _ ("Epoll mode supports only non-blocking sockets\n"));
+#endif
+    MHD_socket_close_chk_ (client_socket);
 #if EINVAL
 #if EINVAL
     errno = EINVAL;
     errno = EINVAL;
 #endif
 #endif