On 11 August 2005 14:59, Sigbjorn Finne wrote:
> "Simon Marlow" <[EMAIL PROTECTED]> 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 ;-)
No - read() can always return less than the requested amount of data,
even when not in O_NONBLOCK mode.
Cheers,
Simon
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs