tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: readv() on TCP socket returns 0
> readv() returns 0 on EOF. If the file descriptor is a TCP socket, I
> guess that means the connexion was closed,
Not necessarily. shutdown(...,SHUT_WR) (or the local equivalent) on
the sending end can produce this without closing the connection
entirely. (Unless you think of a TCP socket as being two connections,
one in each direction, in which case yes, it means the connection
you're reading from was closed.)
> but are there other situations where readv() can return 0 for a TCP
> socket?
I think dyoung is mostly correct: the only case where a 0 return for
readv on a TCP socket isn't a bug, except for the "write data flow
closed" case, is the case where the sum of the iov_len values is zero.
(dyoung said where iovcnt is zero, but, as I read the code, a nonzero
iovcnt but zero in all iov_len values will have identical effect.)
If you care about portability, I would recommend not counting on this.
For example, it wouldn't surprise me if some other OSes returned zero
for a nonblocking read with no data immediately available. (I don't
know of any specific examples.)
/~\ The ASCII Mouse
\ / Ribbon Campaign
X Against HTML mouse%rodents-montreal.org@localhost
/ \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B
Home |
Main Index |
Thread Index |
Old Index