dmitry Sat Feb 24 11:20:43 2007 UTC
Modified files: (Branch: PHP_5_2)
/php-src/sapi/cgi fastcgi.c
Log:
Use poll() instead of select() if available
http://cvs.php.net/viewvc.cgi/php-src/sapi/cgi/fastcgi.c?r1=1.4.2.13.2.18&r2=1.4.2.13.2.19&diff_format=u
Index: php-src/sapi/cgi/fastcgi.c
diff -u php-src/sapi/cgi/fastcgi.c:1.4.2.13.2.18
php-src/sapi/cgi/fastcgi.c:1.4.2.13.2.19
--- php-src/sapi/cgi/fastcgi.c:1.4.2.13.2.18 Wed Feb 21 15:46:13 2007
+++ php-src/sapi/cgi/fastcgi.c Sat Feb 24 11:20:43 2007
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: fastcgi.c,v 1.4.2.13.2.18 2007/02/21 15:46:13 dmitry Exp $ */
+/* $Id: fastcgi.c,v 1.4.2.13.2.19 2007/02/24 11:20:43 dmitry Exp $ */
#include "php.h"
#include "fastcgi.h"
@@ -71,6 +71,13 @@
# include <netdb.h>
# include <signal.h>
+# if defined(HAVE_SYS_POLL_H) && defined(HAVE_POLL)
+# include <sys/poll.h>
+# endif
+# if defined(HAVE_SYS_SELECT_H)
+# include <sys/select.h>
+# endif
+
#ifndef INADDR_NONE
#define INADDR_NONE ((unsigned long) -1)
#endif
@@ -758,17 +765,35 @@
#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;
+ }
+#else
struct timeval tv = {5,0};
fd_set set;
+ int ret;
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)) {
+ do {
+ errno = 0;
+ ret = select(req->fd +
1, &set, NULL, NULL, &tv) >= 0;
+ } while (ret < 0 && errno ==
EINTR);
+ if (ret > 0 &&
FD_ISSET(req->fd, &set)) {
break;
}
- if (errno == EINTR) goto
try_again;
+#endif
fcgi_close(req, 1, 0);
} else {
fprintf(stderr, "Too many open
file descriptors. FD_SETSIZE limit exceeded.");
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php