Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , 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 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: Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit 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/