diff options
Diffstat (limited to 'lib/multi.c')
-rw-r--r-- | lib/multi.c | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/lib/multi.c b/lib/multi.c index 9a653cf95..cbecd6a7d 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -940,13 +940,13 @@ static CURLcode mstate_protocol_pollset(struct Curl_easy *data, static CURLcode mstate_do_pollset(struct Curl_easy *data, struct easy_pollset *ps) { - struct connectdata *conn = data->conn; if(data->conn) { if(data->conn->handler->doing_pollset) return data->conn->handler->doing_pollset(data, ps); - else if(conn->sockfd != CURL_SOCKET_BAD) { + else if(CONN_SOCK_IDX_VALID(data->conn->send_idx)) { /* Default is that we want to send something to the server */ - return Curl_pollset_add_out(data, ps, conn->sockfd); + return Curl_pollset_add_out( + data, ps, data->conn->sock[data->conn->send_idx]); } } return CURLE_OK; @@ -958,9 +958,10 @@ static CURLcode mstate_domore_pollset(struct Curl_easy *data, if(data->conn) { if(data->conn->handler->domore_pollset) return data->conn->handler->domore_pollset(data, ps); - else if(data->conn->sockfd != CURL_SOCKET_BAD) { + else if(CONN_SOCK_IDX_VALID(data->conn->send_idx)) { /* Default is that we want to send something to the server */ - return Curl_pollset_add_out(data, ps, data->conn->sockfd); + return Curl_pollset_add_out( + data, ps, data->conn->sock[data->conn->send_idx]); } } return CURLE_OK; @@ -976,14 +977,15 @@ static CURLcode mstate_perform_pollset(struct Curl_easy *data, else { /* Default is to obey the data->req.keepon flags for send/recv */ CURLcode result = CURLE_OK; - if(CURL_WANT_RECV(data)) { - DEBUGASSERT(data->conn->sockfd != CURL_SOCKET_BAD); - result = Curl_pollset_add_in(data, ps, data->conn->sockfd); + if(CURL_WANT_RECV(data) && CONN_SOCK_IDX_VALID(data->conn->recv_idx)) { + result = Curl_pollset_add_in( + data, ps, data->conn->sock[data->conn->recv_idx]); } - if(!result && Curl_req_want_send(data)) { - DEBUGASSERT(data->conn->writesockfd != CURL_SOCKET_BAD); - result = Curl_pollset_add_out(data, ps, data->conn->writesockfd); + if(!result && Curl_req_want_send(data) && + CONN_SOCK_IDX_VALID(data->conn->send_idx)) { + result = Curl_pollset_add_out( + data, ps, data->conn->sock[data->conn->send_idx]); } return result; } @@ -2555,8 +2557,8 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, /* Only perform the transfer if there is a good socket to work with. Having both BAD is a signal to skip immediately to DONE */ - if((data->conn->sockfd != CURL_SOCKET_BAD) || - (data->conn->writesockfd != CURL_SOCKET_BAD)) + if(CONN_SOCK_IDX_VALID(data->conn->recv_idx) || + CONN_SOCK_IDX_VALID(data->conn->send_idx)) multistate(data, MSTATE_PERFORMING); else { #ifndef CURL_DISABLE_FTP @@ -2791,16 +2793,15 @@ CURLMcode curl_multi_perform(CURLM *m, int *running_handles) if(t) { /* the removed may have another timeout in queue */ struct Curl_easy *data = Curl_splayget(t); + (void)add_next_timeout(now, multi, data); if(data->mstate == MSTATE_PENDING) { bool stream_unused; CURLcode result_unused; if(multi_handle_timeout(data, &now, &stream_unused, &result_unused)) { infof(data, "PENDING handle timeout"); move_pending_to_connect(multi, data); - continue; } } - (void)add_next_timeout(now, multi, Curl_splayget(t)); } } while(t); @@ -3244,13 +3245,13 @@ CURLMcode curl_multi_setopt(CURLM *m, } break; case CURLMOPT_NETWORK_CHANGED: { - long val = va_arg(param, long); - if(val & CURLM_NWCOPT_CLEAR_DNS) { - Curl_dnscache_clear(multi->admin); - } - if(val & CURLM_NWCOPT_CLEAR_CONNS) { - Curl_cpool_nw_changed(multi->admin); - } + long val = va_arg(param, long); + if(val & CURLMNWC_CLEAR_DNS) { + Curl_dnscache_clear(multi->admin); + } + if(val & CURLMNWC_CLEAR_CONNS) { + Curl_cpool_nw_changed(multi->admin); + } break; } default: |