dmitry          Wed Feb 21 15:46:30 2007 UTC

  Modified files:              
    /php-src/sapi/cgi   fastcgi.c 
  Log:
  Check for FD_SETSIZE limit
  
  
http://cvs.php.net/viewvc.cgi/php-src/sapi/cgi/fastcgi.c?r1=1.31&r2=1.32&diff_format=u
Index: php-src/sapi/cgi/fastcgi.c
diff -u php-src/sapi/cgi/fastcgi.c:1.31 php-src/sapi/cgi/fastcgi.c:1.32
--- php-src/sapi/cgi/fastcgi.c:1.31     Mon Feb 19 13:21:49 2007
+++ php-src/sapi/cgi/fastcgi.c  Wed Feb 21 15:46:30 2007
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: fastcgi.c,v 1.31 2007/02/19 13:21:49 dmitry Exp $ */
+/* $Id: fastcgi.c,v 1.32 2007/02/21 15:46:30 dmitry Exp $ */
 
 #include "php.h"
 #include "fastcgi.h"
@@ -757,18 +757,23 @@
                                break;
 #else
                                if (req->fd >= 0) {
-                                       struct timeval tv = {5,0};
-                                       fd_set set;
+                                       if (req->fd < FD_SETSIZE) {
+                                               struct timeval tv = {5,0};
+                                               fd_set set;
 
-                                       FD_ZERO(&set);
-                                       FD_SET(req->fd, &set);
+                                               FD_ZERO(&set);
+                                               FD_SET(req->fd, &set);
 try_again:
-                                       errno = 0;
-                                       if (select(req->fd + 1, &set, NULL, 
NULL, &tv) >= 0 && FD_ISSET(req->fd, &set)) {
-                                               break;
+                                               errno = 0;
+                                               if (select(req->fd + 1, &set, 
NULL, NULL, &tv) >= 0 && FD_ISSET(req->fd, &set)) {
+                                                       break;
+                                               }
+                                               if (errno == EINTR) goto 
try_again;
+                                               fcgi_close(req, 1, 0);
+                                       } else {
+                                               fprintf(stderr, "Too many open 
file descriptors. FD_SETSIZE limit exceeded.");
+                                               fcgi_close(req, 1, 0);
                                        }
-                                       if (errno == EINTR) goto try_again;
-                                       fcgi_close(req, 1, 0);
                                }
 #endif
                        }

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to