I'm not sure how well poll() works for certain FD types (FIFO/anonymous
pipes/various socket types), but I know poll() on Linux works for
everything I've tried, so I might just enable it only under Linux until
other people can test it on other systems.
1. rb_io_wait_readable() + rb_io_wait_writable()
2. IO#wait
3. IO.select with a single object (common in my experience)
rb_thread_select() will probably always be around for backwards
compatibility.
IO.select for multiple IO objects might just be kept as-is for now.
IO.select seems to properly map multiple IO objects using the same FD
properly, which requires extra work and might not be worth it.
I can provide patches and try my best to not break compatibility
with other systems if folks are interested.
Thanks for reading!
--
Eric Wong
> Hello, on some OSes it should be easy to swap out some current
> users of select() for poll(). poll() works better on high-numbered
> file descriptors.
>
> I'm not sure how well poll() works for certain FD types (FIFO/anonymous
> pipes/various socket types), but I know poll() on Linux works for
> everything I've tried, so I might just enable it only under Linux until
> other people can test it on other systems.
For a long time (and maybe still) poll(2) on OS X did not work on fd's for ttys. This is/was because poll(2) was implemented with kqueue(2), which did not support tty fd's.
I attempted to work around the situation once by detecting if the fd was for a tty and using select(2) instead, but in the end it was more hassle than it was worth.
Oh, as I type this, I recall on OS X poll(2) also didn't support fd's for pipes. Same reason as above, kqueue didn't support them.
- Evan