On Nov 13 10:05, Eugene Kotlyarov wrote: > Hello > > I've tried to build latest Curl on Cygwin and encountered problem reason > of which is very nicely summarized on the following page > > http://www.greenend.org.uk/rjk/2001/06/poll.html > > It shows that behaviour of cygwin poll when socket is closed (fourth column > in table) is only compatible with one old version of linux. Though curl > developer probably will make workaround for this, maybe fix it also in > Cygwin to avoid further problems. I've attached the patch for it.
> --- poll.cc.old 2005-11-13 09:05:20.640625000 +0300 > +++ poll.cc 2005-11-13 09:05:32.312500000 +0300 > @@ -119,7 +119,7 @@ > fds[i].revents |= POLLIN; > break; > case 0: /* Closed on the read side. */ > - fds[i].revents |= POLLHUP; > + fds[i].revents |= (POLLHUP | POLLIN); > break; > default: > fds[i].revents |= POLLIN; Thanks for the path and the above URL. It turns out that the patch would result in another change in behaviour. The problem is that there's no way to distinguish between a normal close and a remote shutdown(SHUT_WR). As a result, the above patch would return (POLLHUP | POLLIN) in the close case as well as in the SHUT_WR case. What's bugging me with this approach is the fact that Cygwin would really be the only system returning (POLLHUP | POLLIN) in the SHUT_WR case, just to be compatible with Linux in another case. After some experimenting and thinking about this, I changed the behaviour of poll() now so that it's OpenBSD compatible. In all EOF testcases, POLLIN alone is returned now. This seems to comply best with the SUSv3 description and it plays nicely with the underlying WinSock calls. Thanks for the report, Corinna -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat, Inc. -- 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/