sws: handle EINTR when calling select()

Closes https://github.com/curl/curl/pull/2808
This commit is contained in:
Michael Kaufmann 2018-07-29 13:47:31 +02:00 committed by Jay Satiro
parent ea6f57696c
commit 3db628360c
1 changed files with 14 additions and 11 deletions

View File

@ -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;