From 7767bc48c05fd3e56011b2a136df1366c9ad59ed Mon Sep 17 00:00:00 2001 From: Marc Hoersken Date: Mon, 1 Jun 2020 18:45:21 +0200 Subject: [PATCH] select: fix poll-based check not detecting connect failure The select-based socket check correctly checks for connect failures by adding the write socket also to fds_err. The poll-based implementation (which internally can itself fallback to select again) did not previously check for connect failure by using POLLPRI with the write socket. This commit makes sure connect failures can be detected and handled if HAVE_POLL_FINE is defined, eg. on msys2-devel. Therefore the related disabled tests can be enabled again. Related to #5492 --- appveyor.yml | 6 +++--- lib/select.c | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 3d7fa797197d..1571481eb609 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -220,17 +220,17 @@ environment: - APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2015" BUILD_SYSTEM: autotools TESTING: ON - DISABLED_TESTS: "!19 ~1056 !1233" + DISABLED_TESTS: "~1056" CONFIG_ARGS: "--enable-debug --enable-werror --enable-alt-svc --disable-threaded-resolver --disable-proxy" - APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2019" BUILD_SYSTEM: autotools TESTING: ON - DISABLED_TESTS: "!19 !504 !704 !705 ~1056 !1233" + DISABLED_TESTS: "~1056" CONFIG_ARGS: "--enable-debug --enable-werror --enable-alt-svc --disable-threaded-resolver" - APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2019" BUILD_SYSTEM: autotools TESTING: ON - DISABLED_TESTS: "!19 !504 !704 !705 ~1056 !1233" + DISABLED_TESTS: "~1056" CONFIG_ARGS: "--enable-warnings --enable-werror" install: diff --git a/lib/select.c b/lib/select.c index ca0e24fb13a5..a3973a408db5 100644 --- a/lib/select.c +++ b/lib/select.c @@ -291,7 +291,7 @@ int Curl_socket_check(curl_socket_t readfd0, /* two sockets to read from */ } if(writefd != CURL_SOCKET_BAD) { pfd[num].fd = writefd; - pfd[num].events = POLLWRNORM|POLLOUT; + pfd[num].events = POLLWRNORM|POLLOUT|POLLPRI; pfd[num].revents = 0; num++; } @@ -319,7 +319,7 @@ int Curl_socket_check(curl_socket_t readfd0, /* two sockets to read from */ if(writefd != CURL_SOCKET_BAD) { if(pfd[num].revents & (POLLWRNORM|POLLOUT)) ret |= CURL_CSELECT_OUT; - if(pfd[num].revents & (POLLERR|POLLHUP|POLLNVAL)) + if(pfd[num].revents & (POLLERR|POLLHUP|POLLPRI|POLLNVAL)) ret |= CURL_CSELECT_ERR; }