From: Bruno H. <br...@cl...> - 2008-12-30 01:58:44
|
Hi Sam, Don, > What does ECONNRESET mean? > SUS says that the peer did a shutdown(), so this is a kind of an EOF. SUS (I think you mean SUSv3, which is the same as POSIX:2001) is no longer the current standard. The current one is POSIX:2008, also known as "Base Specifications Issue 7" and available online at <http://www.opengroup.org/onlinepubs/9699919799/> About ECONNRESET it says - for read(): "A read was attempted on a socket and the connection was forcibly closed by its peer." - for write(): "A write was attempted on a socket that is not connected." whereas EPIPE occurs when "A write was attempted on a socket that is shut down for writing, or is no longer connected." Also see <http://www.wlug.org.nz/ECONNRESET>: "This usually means that the program on the other end has crashed, or closed the socket unexpectedly." I think what this means is that the normal way of shutdown of a socket connection - when the peer does a close() or shutdown() call - causes read() to return 0 and write() to fail with SIGPIPE or EPIPE. Whereas a ECONRESET indicates a more severe kind of shutdown. > but why then select says that it is readable? This is normal. select() does not distinguish between "data available" and "no more data available". It distinguishes between "data or EOF available now" and "I/O would block; you must wait until you can get data or EOF". > Let us start with what we should do at the high level. > We have a stream which will signal ECONNRESET on read. I would vote for signaling a STREAM-ERROR condition - so that the program gets alerted about the abrupt termination of the socket - and at the same time set the stream to a state equivalent to EOF - because ECONNRESET is not a transient error condition. > At any rate, I am tempted to treat this as an EOF (not least because it seems > easiest to fit this condition into the trichotomy of ls_avail/ls_eof/ls_wait. This is right w.r.t. to the stream's internal state, but ... > especially given that on win32 we already treat WSAESHUTDOWN as eof. ESHUTDOWN is something different again, see <http://www.wlug.org.nz/ESHUTDOWN> Bruno |