summaryrefslogtreecommitdiff
path: root/lib/multi.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/multi.c')
-rw-r--r--lib/multi.c45
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: