recv and errno during a connection reset/closed by peer

Peter A. Castro doctor@fruitbat.org
Thu Mar 31 10:13:00 GMT 2005


On Wed, 30 Mar 2005, Brian Ford wrote:

> On Tue, 29 Mar 2005, Peter A. Castro wrote:
>> On Tue, 29 Mar 2005, Brian Ford wrote:
>>> If you are doing a normal blocking recv without MSG_PEEK, any return of 0
>>> should mean a closed connection AFAIK.
>>
>> Unfortunately that's not true for all implementation.  It's legal for a
>> zero length data object to be sent.  The network simply sends a header
>> with no payload in it, but it's passed through the network anyways and is
>> presented to the receiver.  The receiver, which might be blocking at the
>> time, will return from the call and get zero length data, but the
>> connection is still valid at this point.  I've seen AS/400's do just this
>> sending zero length data to an AIX box.  If the sender closes the
>> connection normally, then subsequent calls to recv return zero with no
>> indication that the connection is closed.  Call it a bug if you want, but
>> that's how it works.
>
> I agree that zero length data can be sent, but only for UDP or datagram
> based sockets, not for TCP or stream based ones (nothing denotes a message
> here).  Even then, they are only sent by application choice, not just
> randomly by the OS.  Whether a connection is open or closed in this case
> has little meaning.

Nope, sorry, the example I cited above was using TCP, and wasn't really
the applications choice (as I wrote both the server and client apps on
both ends in this example, I can tell you the server app did not send
zero byte data, but the client got a zero byte return after a previous
non-zero byte return).  The network stack on the AS/400 is rather awful
and does send empty segments at odd times.  It's a real life example.
Unfortunately it's neither Cygwin nor Linux, and so likely not relevent
for the OP.

> --
> Brian Ford

-- 
Peter A. Castro <doctor@fruitbat.org> or <Peter.Castro@oracle.com>
 	"Cats are just autistic Dogs" -- Dr. Tony Attwood

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list