[CentOS] linux sockets on centos (slightly off topic)

Fri Dec 8 16:07:46 UTC 2006
Jerry Geis <geisj at pagestation.com>

Hi all,

I have a snippit from the linux sockets (below) talking about detecting 
when
a socket is closed on the other end. It says the doing a read() will 
eventually inform
you the socket is ECONNRESET. I am not seeing this

I open a socket to the peer. I UNPLUG the peer. I plug back in the peer.
all the time I am doing read()'s on linux and I get returns of -1 and 
errno is EINTR
from the alarm() around my read() function. I never get ECONNRESET.

Am I missing something in detecting the peer no longer having the socket 
connection?

Thanks,

Jerry
----------------------------

This text has been taken from the original FAQ.

2.1 - How can I tell when a socket is closed on the other end?
 From Andrew Gierth ( andrew at erlenstar.demon.co.uk):

AFAIK:

If the peer calls close() or exits, without having messed with 
SO_LINGER, then our calls to read() should return 0. It is less clear 
what happens to write() calls in this case; I would expect EPIPE, not on 
the next call, but the one after.

If the peer reboots, or sets l_onoff = 1, l_linger = 0 and then closes, 
then we should get ECONNRESET (eventually) from read(), or EPIPE from 
write().

I should also point out that when write() returns EPIPE, it also raises 
the SIGPIPE signal - you never see the EPIPE error unless you handle or 
ignore the signal.

If the peer remains unreachable, we should get some other error.