From c2862742abc76440657190a02a1e92be1e2c01f1 Mon Sep 17 00:00:00 2001
From: Daniel Stenberg <daniel@haxx.se>
Date: Sun, 13 Nov 2005 09:24:06 +0000
Subject: [PATCH] Thanks to this nice summary of poll() implementations:
 http://www.greenend.org.uk/rjk/2001/06/poll.html and further tests by Eugene
 Kotlyarov, we now know that cygwin's poll returns only POLLHUP on remote
 connection closure so we check for that case (too) and re-enable poll for
 cygwin builds.

---
 CHANGES       | 7 +++++++
 RELEASE-NOTES | 2 +-
 configure.ac  | 4 ++--
 lib/select.c  | 2 +-
 4 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/CHANGES b/CHANGES
index 77df717345..47c76f7143 100644
--- a/CHANGES
+++ b/CHANGES
@@ -8,6 +8,13 @@
 
 
 
+Daniel (13 November 2005)
+- Thanks to this nice summary of poll() implementations:
+  http://www.greenend.org.uk/rjk/2001/06/poll.html and further tests by Eugene
+  Kotlyarov, we now know that cygwin's poll returns only POLLHUP on remote
+  connectin closure so we check for that case (too) and re-enable poll for
+  cygwin builds.
+
 Daniel (12 November 2005)
 - Eugene Kotlyarov found out that cygwin's poll() function isn't doing things
   right: http://curl.haxx.se/mail/archive-2005-11/0045.html so we now disable
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index bc2037a0a9..0bfb637ac5 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -18,7 +18,7 @@ This release includes the following changes:
 
 This release includes the following bugfixes:
 
- o don't use poll() on cygwin, it is defective
+ o fixed libcurl's use of poll() on cygwin
  o the GnuTLS code didn't support client certificates
  o TFTP over IPv6 works
  o no reverse lookups on IP addresses when ipv6-enabled
diff --git a/configure.ac b/configure.ac
index 50fa2959cf..629f0ba286 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1591,10 +1591,10 @@ AC_CHECK_DECL(basename, ,
 #endif
 )
 
-AC_MSG_CHECKING([if we are Mac OS X or cygwin to disable poll])
+AC_MSG_CHECKING([if we are Mac OS X (to disable poll)])
 disable_poll=no
 case $host in
-  *-*-darwin* | *-*-cygwin)
+  *-*-darwin*)
     disable_poll="yes";
     ;;
   *)
diff --git a/lib/select.c b/lib/select.c
index 634f8efda9..f370b11101 100644
--- a/lib/select.c
+++ b/lib/select.c
@@ -104,7 +104,7 @@ int Curl_select(curl_socket_t readfd, curl_socket_t writefd, int timeout_ms)
   ret = 0;
   num = 0;
   if (readfd != CURL_SOCKET_BAD) {
-    if (pfd[num].revents & POLLIN)
+    if (pfd[num].revents & (POLLIN|POLLHUP))
       ret |= CSELECT_IN;
     if (pfd[num].revents & POLLERR)
       ret |= CSELECT_ERR;
-- 
GitLab