From: Michael Kaufmann Date: Sun, 29 Jul 2018 11:47:31 +0000 (+0200) Subject: sws: handle EINTR when calling select() X-Git-Tag: curl-7_61_1~111 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3db628360ced36ad73ab75036d6fed9738f59871;p=thirdparty%2Fcurl.git sws: handle EINTR when calling select() Closes https://github.com/curl/curl/pull/2808 --- diff --git a/tests/server/sws.c b/tests/server/sws.c index ec11224f57..4879cfa8b1 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;