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