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

Jerry Geis

geisj at pagestation.com
Fri Dec 8 16:07:46 UTC 2006


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.



More information about the CentOS mailing list