]> granicus.if.org Git - php/commitdiff
poll() is not affected by FD_SETSIZE (Tony)
authorDmitry Stogov <dmitry@php.net>
Mon, 26 Feb 2007 09:38:44 +0000 (09:38 +0000)
committerDmitry Stogov <dmitry@php.net>
Mon, 26 Feb 2007 09:38:44 +0000 (09:38 +0000)
sapi/cgi/fastcgi.c

index 7bbabb11273b6e7e0322344d366e11ff19194698..6e915804f10d75c0a9eae7dc92d2693228b447bd 100644 (file)
@@ -764,22 +764,23 @@ int fcgi_accept_request(fcgi_request *req)
                                break;
 #else
                                if (req->fd >= 0) {
-                                       if (req->fd < FD_SETSIZE) {
 #if defined(HAVE_SYS_POLL_H) && defined(HAVE_POLL)
-                                               struct pollfd fds;
-                                               int ret;
-
-                                               fds.fd = req->fd;
-                                               fds.events = POLLIN;
-                                               fds.revents = 0;
-                                               do {
-                                                       errno = 0;
-                                                       ret = poll(&fds, 1, 5000);
-                                               } while (ret < 0 && errno == EINTR);
-                                               if (ret > 0 && (fds.revents & POLLIN)) {
-                                                       break;
-                                               }
+                                       struct pollfd fds;
+                                       int ret;
+
+                                       fds.fd = req->fd;
+                                       fds.events = POLLIN;
+                                       fds.revents = 0;
+                                       do {
+                                               errno = 0;
+                                               ret = poll(&fds, 1, 5000);
+                                       } while (ret < 0 && errno == EINTR);
+                                       if (ret > 0 && (fds.revents & POLLIN)) {
+                                               break;
+                                       }
+                                       fcgi_close(req, 1, 0);
 #else
+                                       if (req->fd < FD_SETSIZE) {
                                                struct timeval tv = {5,0};
                                                fd_set set;
                                                int ret;
@@ -793,12 +794,12 @@ int fcgi_accept_request(fcgi_request *req)
                                                if (ret > 0 && FD_ISSET(req->fd, &set)) {
                                                        break;
                                                }
-#endif
                                                fcgi_close(req, 1, 0);
                                        } else {
                                                fprintf(stderr, "Too many open file descriptors. FD_SETSIZE limit exceeded.");
                                                fcgi_close(req, 1, 0);
                                        }
+#endif
                                }
 #endif
                        }