diff options
author | Michael Kaufmann <mail@michael-kaufmann.ch> | 2018-07-29 13:47:31 +0200 |
---|---|---|
committer | Jay Satiro <raysatiro@yahoo.com> | 2018-07-29 14:52:02 -0400 |
commit | 3db628360ced36ad73ab75036d6fed9738f59871 (patch) | |
tree | bb744c8c823841f102769a9c57cb53a7da22413f /tests | |
parent | ea6f57696c64149218a2f1d179afe67775d8a2be (diff) | |
download | curl-3db628360ced36ad73ab75036d6fed9738f59871.tar.gz |
sws: handle EINTR when calling select()
Closes https://github.com/curl/curl/pull/2808
Diffstat (limited to 'tests')
-rw-r--r-- | tests/server/sws.c | 25 |
1 files 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; |