In Digital Unix 4.0, select and poll have a "feature" which I'm
finding very frustrating as I try to port an application which is
heavy with non-blocking I/O. Quoting from "man select":
[Digital] Objects ready for the requested operation are those which
the operation would not block and not necessarily those which have
data available for the operation.
True to the man page, select returns immediately if any file
descriptor in the fdset is non-blocking, even if there's no data
available. Poll works the same way, unsurprisingly. So my question
is, if I'm working with file descriptors for sockets or named pipes
which are non-blocking, how can I block in select or poll until there
really is data available to read? This is the behavior I see in
Linux, HPUX, AIX, and Solaris, and it's the behavior expected by the
application I'm porting.
One approach that I've tried without success is to save, modify, and
restore the fd flags around the select call using fcntl. Curiously,
turning off O_NONBLOCK before calling select had no apparent effect.
A bug?
Thanks in advance for any light you can shed on this problem. And
also thanks for getting me this far -- it was only by searching this
list's archive that I discovered how to make g++ and libg++ compile
and install successfully.
Received on Thu Jul 31 1997 - 02:43:45 NZST