diff options
Diffstat (limited to 'lib/multi.c')
-rw-r--r-- | lib/multi.c | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/lib/multi.c b/lib/multi.c index 370cb97d5..d38155cd9 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -912,7 +912,7 @@ static CURLcode mstate_connecting_pollset(struct Curl_easy *data, struct easy_pollset *ps) { if(data->conn) { - curl_socket_t sockfd = Curl_conn_get_socket(data, FIRSTSOCKET); + curl_socket_t sockfd = Curl_conn_get_first_socket(data); if(sockfd != CURL_SOCKET_BAD) { /* Default is to wait to something from the server */ return Curl_pollset_change(data, ps, sockfd, CURL_POLL_IN, 0); @@ -928,7 +928,7 @@ static CURLcode mstate_protocol_pollset(struct Curl_easy *data, curl_socket_t sockfd; if(data->conn->handler->proto_pollset) return data->conn->handler->proto_pollset(data, ps); - sockfd = Curl_conn_get_socket(data, FIRSTSOCKET); + sockfd = data->conn->sock[FIRSTSOCKET]; if(sockfd != CURL_SOCKET_BAD) { /* Default is to wait to something from the server */ return Curl_pollset_change(data, ps, sockfd, CURL_POLL_IN, 0); @@ -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); |