From 3db628360ced36ad73ab75036d6fed9738f59871 Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Sun, 29 Jul 2018 13:47:31 +0200 Subject: sws: handle EINTR when calling select() Closes https://github.com/curl/curl/pull/2808 --- tests/server/sws.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/tests/server/sws.c b/tests/server/sws.c index ec11224f5..4879cfa8b 100644 --- a/tests/server/sws.c +++ b/tests/server/sws.c @@ -1536,18 +1536,18 @@ static void http_connect(curl_socket_t *infdp, if(got_exit_signal) break; - rc = select((int)maxfd + 1, &input, &output, NULL, &timeout); + do { + rc = select((int)maxfd + 1, &input, &output, NULL, &timeout); + } while(rc < 0 && errno == EINTR && !got_exit_signal); + + if(got_exit_signal) + break; if(rc > 0) { /* socket action */ - bool tcp_fin_wr; + bool tcp_fin_wr = FALSE; timeout_count = 0; - if(got_exit_signal) - break; - - tcp_fin_wr = FALSE; - /* ---------------------------------------------------------- */ /* passive mode FTP may establish a secondary tunnel */ @@ -2289,7 +2289,13 @@ int main(int argc, char *argv[]) if(got_exit_signal) goto sws_cleanup; - rc = select((int)maxfd + 1, &input, &output, NULL, &timeout); + do { + rc = select((int)maxfd + 1, &input, &output, NULL, &timeout); + } while(rc < 0 && errno == EINTR && !got_exit_signal); + + if(got_exit_signal) + goto sws_cleanup; + if(rc < 0) { error = SOCKERRNO; logmsg("select() failed with error: (%d) %s", @@ -2297,9 +2303,6 @@ int main(int argc, char *argv[]) goto sws_cleanup; } - if(got_exit_signal) - goto sws_cleanup; - if(rc == 0) { /* Timed out - try again */ continue; -- cgit v1.2.3