diff options
Diffstat (limited to 'lib/transfer.c')
-rw-r--r-- | lib/transfer.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/lib/transfer.c b/lib/transfer.c index 5c8eb31d3..6bf95c576 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -2018,11 +2018,18 @@ Curl_setup_transfer( DEBUGASSERT((sockindex <= 1) && (sockindex >= -1)); - /* now copy all input parameters */ - conn->sockfd = sockindex == -1 ? + if(conn->bits.multiplex || conn->httpversion == 20) { + /* when multiplexing, the read/write sockets need to be the same! */ + conn->sockfd = sockindex == -1 ? + conn->sock[writesockindex] : conn->sock[sockindex]; + conn->writesockfd = conn->sockfd; + } + else { + conn->sockfd = sockindex == -1 ? CURL_SOCKET_BAD : conn->sock[sockindex]; - conn->writesockfd = writesockindex == -1 ? + conn->writesockfd = writesockindex == -1 ? CURL_SOCKET_BAD:conn->sock[writesockindex]; + } k->getheader = getheader; k->size = size; @@ -2041,10 +2048,10 @@ Curl_setup_transfer( /* we want header and/or body, if neither then don't do this! */ if(k->getheader || !data->set.opt_no_body) { - if(conn->sockfd != CURL_SOCKET_BAD) + if(sockindex != -1) k->keepon |= KEEP_RECV; - if(conn->writesockfd != CURL_SOCKET_BAD) { + if(writesockindex != -1) { struct HTTP *http = data->req.protop; /* HTTP 1.1 magic: @@ -2075,7 +2082,7 @@ Curl_setup_transfer( /* enable the write bit when we're not waiting for continue */ k->keepon |= KEEP_SEND; } - } /* if(conn->writesockfd != CURL_SOCKET_BAD) */ + } /* if(writesockindex != -1) */ } /* if(k->getheader || !data->set.opt_no_body) */ } |