Subject: Re: select(2) question...
To: der Mouse <mouse@Collatz.McRCIM.McGill.EDU>
From: Ken Hornstein <kenh@entropic.com>
List: netbsd-users
Date: 12/14/1994 13:37:08
>> If I'm not mistaken, an end of file is signalled by a zero-length
>> read.
>
>Mostly true.  Zero-length reads can also indicate no data available in
>nonblocking mode.
>
>> If select says the data is available for reading, and read() returns
>> zero, then the file is closed.
>
>No - just that EOF has been reached.  If a non-open file descriptor
>number is passed to select(), it returns EBADF.

What I meant was that the file descriptor had been closed at the other end, but
it's easy to read that either way.

>Note that it is also possible for select() to indicate reading is
>possible but for a read to return zero if:
>	- Another process also holds a copy of that file descriptor
>	  (eg, inherited via fork).
>	- The fd is nonblocking.
>	- The other process consumed all available data between the
>	  time select() returned and the time read() was called.

Certainly an obscure set of conditions! :-)  Which leads me to wonder; is there
another way to detect EOF on a descriptor?

>By the way, this strikes me as off-topic for tech-userlevel; it's
>actually about syscalls in general and the guts of select().  Perhaps
>tech-userlevel should be removed from the cc list?

I've removed it from the cc line.

--Ken