stdin set to nonblocking mode

Sigbjorn Finne sof at galois.com
Thu Aug 11 09:58:34 EDT 2005


"Simon Marlow" <simonmar at microsoft.com> writes:
> On 11 August 2005 01:18, John Meacham wrote:
> 
>> Why do we set file descriptors to nonblocking mode anyway if they are
>> waited on by a select. there shouldn't be a need to use both
> 
> It avoids an extra system call per read(), i.e. a single read() instead
> of select() + read().  And there's a slight chance of a race between the
> select() and read() calls, if some other thread or process is reading
> from the same descriptor.  With non-blocking read(), this isn't an
> issue.
> 
> The overhead of the extra syscall is probably a non-issue, but the race
> is mildly worrying.
> 

The main reason for using non-blocking descriptors is that select() only
tells you that I/O is possible over a descriptor, not the amount. Hence
block read()s and writes() run the real risk of blocking the whole system.
Insisting on single byte read()/write()s is not an option ;-)

--sigbjorn




More information about the Glasgow-haskell-bugs mailing list