We avoid the problem by using poll(2).
On systems without poll(2) (older bsd-ish systems, and win32), we emulate
poll(2) using select(2) and check for valid descriptors before attempting
to access them via the descriptor sets.
If an out-of-range descriptor is detected, an E_WARNING is raised suggesting
that PHP should be recompiled with a larger FD_SETSIZE (and also with a
suggested value).
Most uses of select(2) in the source are to poll a single descriptor, so
a couple of handy wrapper functions have been added to make this easier.
A configure option --enable-fd-setsize has been added to both the unix and
win32 builds; on unix we default to 16384 and on windows we default to 256.
Windows FD_SETSIZE imposes a limit on the maximum number of descriptors that
can be select()ed at once, whereas the unix FD_SETSIZE limit is based on the
highest numbered descriptor; 256 should be plenty for PHP scripts under windows
(the default OS setting is 64).
The win32 specific parts are untested; will do that now.
Big fat note: if you're building from a .dsp, you need to replicate
the custom build step that uses MC to generate the message catalog
To make use of this fix, you need to register the event source; running "nmake
install" will handle this for you (if you also build the win32std extension
from pecl).
I'll arrange with Phil to have the installer handle this registration too.
This fix relies on you having the Platform SDK headers.
Using the new build system, the NewAPIs.h header will be detected
automatically, however, for people building using .dsp files,
you will need to add /DHAVE_NEWAPIS_H=1 to the TSRM project
if you have those newer headers.
Using it will attempt to switch on any configure options that
were left to their default value of "no".
Add a "snap" target to the makefile which will run a sub-process
to make each SAPI and EXT independently, so that the whole process
does not bail out if a particular extension is broken.
Add a way to specify dependencies between extensions in the
config.w32 files so that the makefile will include appropriate rules
and linkage.
- Add major + minor version to .dll and .exe headers during linking
- Handle pecl build dir correctly when pecl is a sibling of php-src
- try and guess where your cygwin utils are installed (if you have them)
so that we can detect bison, flex etc.
- other little refinements
If no php_build dir is specified, then look for either of the two
"standard" things in reasonable locations.
Allow CHECK_LIB to search for the "same" library using a ; separated
list of alternatives.
Tweak nsapi config and remove redundant or unused flags.
Add ZTS checks for both isapi and nsapi configs.