php_socket_t max_fd = SOCK_ERR;
unsigned int i, n;
struct timeval tv;
-
+
/* check the highest numbered descriptor */
for (i = 0; i < nfds; i++) {
if (ufds[i].fd > max_fd)
FD_ZERO(&eset);
for (i = 0; i < nfds; i++) {
- if (ufds[i].fd >= FD_SETSIZE) {
- /* unsafe to set */
- ufds[i].revents = POLLNVAL;
- continue;
- }
if (ufds[i].events & PHP_POLLREADABLE) {
- FD_SET(ufds[i].fd, &rset);
+ PHP_SAFE_FD_SET(ufds[i].fd, &rset);
}
if (ufds[i].events & POLLOUT) {
- FD_SET(ufds[i].fd, &wset);
+ PHP_SAFE_FD_SET(ufds[i].fd, &wset);
}
if (ufds[i].events & POLLPRI) {
- FD_SET(ufds[i].fd, &eset);
+ PHP_SAFE_FD_SET(ufds[i].fd, &eset);
}
}
tv.tv_sec = timeout / 1000;
tv.tv_usec = (timeout - (tv.tv_sec * 1000)) * 1000;
}
-
n = select(max_fd + 1, &rset, &wset, &eset, timeout >= 0 ? &tv : NULL);
if (n >= 0) {
for (i = 0; i < nfds; i++) {
- if (ufds[i].fd >= FD_SETSIZE) {
- continue;
- }
-
ufds[i].revents = 0;
- if (FD_ISSET(ufds[i].fd, &rset)) {
+ if (PHP_SAFE_FD_ISSET(ufds[i].fd, &rset)) {
/* could be POLLERR or POLLHUP but can't tell without probing */
ufds[i].revents |= POLLIN;
}
- if (FD_ISSET(ufds[i].fd, &wset)) {
+ if (PHP_SAFE_FD_ISSET(ufds[i].fd, &wset)) {
ufds[i].revents |= POLLOUT;
}
- if (FD_ISSET(ufds[i].fd, &eset)) {
+ if (PHP_SAFE_FD_ISSET(ufds[i].fd, &eset)) {
ufds[i].revents |= POLLPRI;
}
}
}
-
return n;
}
/* this allows up to 256 sockets to be select()ed in a single
* call to select(), instead of the usual 64 */
ARG_ENABLE('fd-setsize', "Set maximum number of sockets for select(2)", "256");
-AC_DEFINE('FD_SETSIZE', PHP_FD_SETSIZE);
+ADD_FLAG("CFLAGS", "/D FD_SETSIZE=" + parseInt(PHP_FD_SETSIZE));
ARG_ENABLE("memory-limit", "Enable memory limit checking code", "no");