Mail Archives: cygwin/2005/03/30/22:42:44
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 AT fruitbat DOT org> or <Peter DOT Castro AT oracle DOT 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/
- Raw text -