summaryrefslogtreecommitdiff
path: root/sapi/cgi/fastcgi.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2007-02-21 15:46:13 +0000
committerDmitry Stogov <dmitry@php.net>2007-02-21 15:46:13 +0000
commit2b5e7d315f09c03a6ad9de46b96d629b6a58d8fc (patch)
tree243aefac5b4ede8a392c58e5ac289b245cd77385 /sapi/cgi/fastcgi.c
parent94bab7b2067d28092ee9e03c3e5b6537cd930dd0 (diff)
downloadphp-git-2b5e7d315f09c03a6ad9de46b96d629b6a58d8fc.tar.gz
Check for FD_SETSIZE limit
Diffstat (limited to 'sapi/cgi/fastcgi.c')
-rw-r--r--sapi/cgi/fastcgi.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/sapi/cgi/fastcgi.c b/sapi/cgi/fastcgi.c
index 639d348a7d..3ac12a2def 100644
--- a/sapi/cgi/fastcgi.c
+++ b/sapi/cgi/fastcgi.c
@@ -757,18 +757,23 @@ int fcgi_accept_request(fcgi_request *req)
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
}