1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-21 23:58:49 -05:00

- 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:
Daniel Stenberg 2003-10-08 13:32:43 +00:00
parent e612f73374
commit 5c52cacc98
3 changed files with 27 additions and 20 deletions

View File

@ -7,6 +7,10 @@
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)
- Neil Dunbar provided a patch that now makes libcurl check SSL
subjectAltNames when matching certs. This is apparently detailed in RFC2818

View File

@ -19,7 +19,8 @@ This release includes the following changes:
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 builds fine on BeOS now
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
Kimdon, Dominick Meglio, Markus Moeller, Giuseppe Attardi, James MacMillan,
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)

View File

@ -620,23 +620,6 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
failf(data, "no address available");
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
know for the given host. One by one. */
@ -645,6 +628,24 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
aliasindex++) {
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 */
memset((char *) &serv_addr, '\0', sizeof(serv_addr));
memcpy((char *)&(serv_addr.sin_addr),
@ -706,6 +707,7 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
if(0 != rc) {
/* get a new timeout for next attempt */
sclose(sockfd);
after = Curl_tvnow();
timeout_ms -= Curl_tvdiff(after, before);
if(timeout_ms < 0) {
@ -717,9 +719,9 @@ CURLcode Curl_connecthost(struct connectdata *conn, /* context */
}
break;
}
if(0 != rc) {
/* no good connect was made */
sclose(sockfd);
*sockconn = -1;
failf(data, "Connect failed");
return CURLE_COULDNT_CONNECT;