poll() can be used to get finer-grained information about the state
of a particular file descriptor; select() can be used to get cruder
information about a set of file descriptors.
Poll() is also more efficient if there are lots of descriptors involved.
When select() returns, you have to search through all the descriptors
looking for the ones that became readable/writable, while poll() simply
returns the list of readable/writable descriptors.[/QUOTE]
More than that, a classic BSD kernel implementation of select() involved
sowakeup() to awakening all processes in the system stuck select() so
that each process can search its bit masks for a descriptor that
justifies returning to user mode. That works ok on a tiny system like
a VAX 780, but it's kind of slow on systems with lots of network jobs.
It's really painful on multi-processors with more than a trivial number
of CPUs because of the inter-CPU chatter required for locking file
descriptors and so forth.
Vernon Schryver (e-mail address removed)