delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2005/03/25/02:39:11

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
Message-ID: <4243C14B.AC1A0432@dessent.net>
Date: Thu, 24 Mar 2005 23:44:11 -0800
From: Brian Dessent <brian AT dessent DOT net>
Organization: My own little world...
MIME-Version: 1.0
To: cygwin AT cygwin DOT com
Subject: Re: recv and errno during a connection reset/closed by peer
References: <!~!UENERkVCMDkAAQACAAAAAAAAAAAAAAAAABgAAAAAAAAAUKQItienSEKG+9226yKd5cKAAAAQAAAAABEV8lCYiUqikvlg/nhWLAEAAAAA AT sbcglobal DOT net>
X-IsSubscribed: yes
Reply-To: cygwin AT cygwin DOT com

Peter Stephens wrote:

> When in non-blocking mode I thought I would be able to get a return from
> recv of '-1' and then check errno, but it never seems to be anything but
> '11', or EAGAIN.  This seems to be true whether I MSG_PEEK or not.
> 
> I have included my code below.  The intention is that for recv returns
> greater than zero, there is a message and I should process it and get ready
> for the next one.  For recv returns of '0' I should do nothing and for recv
> returns of '-1' I should handle per errno.
> 
> Seems easy enough, but no matter what I have tried I can only get a recv
> return of EAGAIN.
> ...
>          rcv_length = recv(threadarg->new_fd,NULL,NULL,MSG_PEEK);

Try passing a buffer and length to recv().  The Cygwin code does not
attempt to do anything with the socket if buf = NULL and len = 0.  (You
can look at it yourself, file winsup/cygwin/net.cc, functions
cygwin_recv() and cygwin_recvfrom().)  How would you ever expect recv()
to return >0 when you don't give it a buffer to put the data into?  The
POSIX standard doesn't say anything about the behavior of recv() when
buf=NULL so what you're trying to do must be some nonstandard quirk of
other systems' libc.

Brian

--
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 -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019