- Frank Ticheler provided a patch that fixes how libcurl connects to multiple
addresses, if one of them fails (ipv4-code).
This commit is contained in:
parent
e612f73374
commit
5c52cacc98
4
CHANGES
4
CHANGES
@ -7,6 +7,10 @@
|
|||||||
Changelog
|
Changelog
|
||||||
|
|
||||||
|
|
||||||
|
Daniel (8 October)
|
||||||
|
- Frank Ticheler provided a patch that fixes how libcurl connects to multiple
|
||||||
|
addresses, if one of them fails (ipv4-code).
|
||||||
|
|
||||||
Daniel (7 October)
|
Daniel (7 October)
|
||||||
- Neil Dunbar provided a patch that now makes libcurl check SSL
|
- Neil Dunbar provided a patch that now makes libcurl check SSL
|
||||||
subjectAltNames when matching certs. This is apparently detailed in RFC2818
|
subjectAltNames when matching certs. This is apparently detailed in RFC2818
|
||||||
|
@ -19,7 +19,8 @@ This release includes the following changes:
|
|||||||
|
|
||||||
This release includes the following bugfixes:
|
This release includes the following bugfixes:
|
||||||
|
|
||||||
o libcurl checks subjectAltNames when matching certs
|
o fixed the ipv4 connect code when a DNS entry has multiple IPs
|
||||||
|
o now checks subjectAltNames when matching certs
|
||||||
o HTTP POST using read callback works again
|
o HTTP POST using read callback works again
|
||||||
o builds fine on BeOS now
|
o builds fine on BeOS now
|
||||||
o CURLOPT_COOKIE set to NULL no longer sends the previously set cookie
|
o CURLOPT_COOKIE set to NULL no longer sends the previously set cookie
|
||||||
@ -64,6 +65,6 @@ advice from friends like these:
|
|||||||
Early Ehlinger, Kevin Fisk, Jurij Smakov, Bjorn Reese, Tim Bartley, David
|
Early Ehlinger, Kevin Fisk, Jurij Smakov, Bjorn Reese, Tim Bartley, David
|
||||||
Kimdon, Dominick Meglio, Markus Moeller, Giuseppe Attardi, James MacMillan,
|
Kimdon, Dominick Meglio, Markus Moeller, Giuseppe Attardi, James MacMillan,
|
||||||
Neil Spring, Siddhartha Prakash Jain, Jon Turner, Vincent Bronner, Shard,
|
Neil Spring, Siddhartha Prakash Jain, Jon Turner, Vincent Bronner, Shard,
|
||||||
Jeremy Friesner, Florian Schoppmann, Neil Dunbar
|
Jeremy Friesner, Florian Schoppmann, Neil Dunbar, Frank Ticheler
|
||||||
|
|
||||||
Thanks! (and sorry if I forgot to mention someone)
|
Thanks! (and sorry if I forgot to mention someone)
|
||||||
|
@ -620,23 +620,6 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
|
|||||||
failf(data, "no address available");
|
failf(data, "no address available");
|
||||||
return CURLE_COULDNT_CONNECT;
|
return CURLE_COULDNT_CONNECT;
|
||||||
}
|
}
|
||||||
/* create an IPv4 TCP socket */
|
|
||||||
sockfd = socket(AF_INET, SOCK_STREAM, 0);
|
|
||||||
if(-1 == sockfd) {
|
|
||||||
failf(data, "couldn't create socket");
|
|
||||||
return CURLE_COULDNT_CONNECT; /* big time error */
|
|
||||||
}
|
|
||||||
|
|
||||||
if(conn->data->set.device) {
|
|
||||||
/* user selected to bind the outgoing socket to a specified "device"
|
|
||||||
before doing connect */
|
|
||||||
CURLcode res = bindlocal(conn, sockfd);
|
|
||||||
if(res)
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Convert socket to non-blocking type */
|
|
||||||
Curl_nonblock(sockfd, TRUE);
|
|
||||||
|
|
||||||
/* This is the loop that attempts to connect to all IP-addresses we
|
/* This is the loop that attempts to connect to all IP-addresses we
|
||||||
know for the given host. One by one. */
|
know for the given host. One by one. */
|
||||||
@ -645,6 +628,24 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
|
|||||||
aliasindex++) {
|
aliasindex++) {
|
||||||
struct sockaddr_in serv_addr;
|
struct sockaddr_in serv_addr;
|
||||||
|
|
||||||
|
/* create an IPv4 TCP socket */
|
||||||
|
sockfd = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
if(-1 == sockfd) {
|
||||||
|
failf(data, "couldn't create socket");
|
||||||
|
return CURLE_COULDNT_CONNECT; /* big time error */
|
||||||
|
}
|
||||||
|
|
||||||
|
if(conn->data->set.device) {
|
||||||
|
/* user selected to bind the outgoing socket to a specified "device"
|
||||||
|
before doing connect */
|
||||||
|
CURLcode res = bindlocal(conn, sockfd);
|
||||||
|
if(res)
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Convert socket to non-blocking type */
|
||||||
|
Curl_nonblock(sockfd, TRUE);
|
||||||
|
|
||||||
/* do this nasty work to do the connect */
|
/* do this nasty work to do the connect */
|
||||||
memset((char *) &serv_addr, '\0', sizeof(serv_addr));
|
memset((char *) &serv_addr, '\0', sizeof(serv_addr));
|
||||||
memcpy((char *)&(serv_addr.sin_addr),
|
memcpy((char *)&(serv_addr.sin_addr),
|
||||||
@ -706,6 +707,7 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
|
|||||||
|
|
||||||
if(0 != rc) {
|
if(0 != rc) {
|
||||||
/* get a new timeout for next attempt */
|
/* get a new timeout for next attempt */
|
||||||
|
sclose(sockfd);
|
||||||
after = Curl_tvnow();
|
after = Curl_tvnow();
|
||||||
timeout_ms -= Curl_tvdiff(after, before);
|
timeout_ms -= Curl_tvdiff(after, before);
|
||||||
if(timeout_ms < 0) {
|
if(timeout_ms < 0) {
|
||||||
@ -717,9 +719,9 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(0 != rc) {
|
if(0 != rc) {
|
||||||
/* no good connect was made */
|
/* no good connect was made */
|
||||||
sclose(sockfd);
|
|
||||||
*sockconn = -1;
|
*sockconn = -1;
|
||||||
failf(data, "Connect failed");
|
failf(data, "Connect failed");
|
||||||
return CURLE_COULDNT_CONNECT;
|
return CURLE_COULDNT_CONNECT;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user