1.3.19-1:poll bug. Patch included.

Peter Rehley peter@rehley.net
Mon Feb 3 07:15:00 GMT 2003


Hello,

Just to make sure that we are both clear.  Change recvfrom so that if 
the buffer is too small it returns the number of bytes that can be 
written into the buffer instead of setting errno.  Also clear errno 
since there is no error.

Now in poll since we will now be returning the number of bytes instead 
of -1, do we will need to check for WSAEMSGSIZE?  I don't think so 
because that will now be handled in recvfrom.

Is this correct?

Peter

On Sunday, February 2, 2003, at 07:03  PM, Christopher Faylor wrote:

> On Sun, Feb 02, 2003 at 06:37:34PM -0800, Peter Rehley wrote:
>> Hello,
>>
>> While working on another program (syslogd in inetutils) I found that
>> the poll function was returning POLLERR when something arrived on a 
>> UDP
>> socket; it should be return POLLIN.  Inside the poll function, 
>> recvfrom
>> was returning -1 with errno = EMSGSIZE, but the only error value being
>> check for in WSAENOTCONN.  However EMSGSIZE is a reasonable return
>> value since the buffer to recvfrom was only 1 byte while the actual
>> message size was larger than this.  Basically saying your buffer is 
>> too
>> small for the message, but since we are only peeking, this shouldn't 
>> be
>> returned as a POLLERR.
>>
>> The fix should be to add EMSGSIZE as part of the condition so this
>> error returns POLLIN.  I'm including the patch below and a changelog
>> following that.  Please review these changes and make sure that they
>> seem reasonable.  I've done tests on my system (windows XP) and have
>> verified that the change works.
>
> Thanks for the patch.  Would you mind reworking it so that it doesn't 
> set
> errno at all in the case that you describe and then check against the 
> correct
> WSAGetLastError value?
>
> cgf
>
>> Patch
>> -----------------------------------
>> Index: winsup/cygwin/poll.cc
>> ===================================================================
>> RCS file: /cvs/src/src/winsup/cygwin/poll.cc,v
>> retrieving revision 1.34
>> diff -u -p -r1.34 poll.cc
>> --- winsup/cygwin/poll.cc	20 Nov 2002 11:00:15 -0000	1.34
>> +++ winsup/cygwin/poll.cc	3 Feb 2003 01:52:10 -0000
>> @@ -112,7 +112,8 @@ poll (struct pollfd *fds, unsigned int n
>> 				 sense then.  It returns WSAENOTCONN in that
>> 				 case.  Since that's not actually an error,
>> 				 we must not set POLLERR but POLLIN. */
>> -			      if (WSAGetLastError () != WSAENOTCONN)
>> +			      if (WSAGetLastError () != WSAENOTCONN &&
>> +				  errno!=EMSGSIZE)
>> 				fds[i].revents |= POLLERR;
>> 			      else
>> 				fds[i].revents |= POLLIN;
>> ----------------------
>> Changelog
>> 2003-02-02  Peter Rehley<peter@rehley.net>
>>
>> * poll.cc: EMSGSIZE being ignore returning incorrect POLLERR on UDP
>> socket receive
>> if recvfrom returns error, return POLLIN if errno = EMSGSIZE
>> -----------------------
>>
>> Peter
>> =====
>> Infinity Softworks.  Making scientific, financial and realtor
>> calculators for Palm Pilots and other PDAs since 1997
>>
>> Visit them today at http://www.infinitysw.com
>>
>>
>> --
>> Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
>> Bug reporting:         http://cygwin.com/bugs.html
>> Documentation:         http://cygwin.com/docs.html
>> FAQ:                   http://cygwin.com/faq/
>
> --
> Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
> Bug reporting:         http://cygwin.com/bugs.html
> Documentation:         http://cygwin.com/docs.html
> FAQ:                   http://cygwin.com/faq/
>
>
>
=====

Infinity Softworks.  Making scientific, financial and realtor 
calculators for Palm Pilots and other PDAs since 1997

Visit them today at http://www.infinitysw.com


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list