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 Date: Sun, 2 Feb 2003 18:37:34 -0800 Mime-Version: 1.0 (Apple Message framework v551) Content-Type: text/plain; charset=US-ASCII; format=flowed Subject: 1.3.19-1:poll bug. Patch included. From: Peter Rehley To: cygwin AT cygwin DOT com Content-Transfer-Encoding: 7bit Message-Id: <7374AB6B-3720-11D7-B5F3-00306540AD5E@rehley.net> 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. 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 * 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/