Skip to content

Commit

Permalink
- Frank Ticheler provided a patch that fixes how libcurl connects to …
Browse files Browse the repository at this point in the history
…multiple

  addresses, if one of them fails (ipv4-code).
  • Loading branch information
bagder committed Oct 8, 2003
1 parent e612f73 commit 5c52cac
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 20 deletions.
4 changes: 4 additions & 0 deletions CHANGES
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 3 additions & 2 deletions RELEASE-NOTES
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
38 changes: 20 additions & 18 deletions lib/connect.c
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -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. */
Expand All @@ -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),
Expand Down Expand Up @@ -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) {
Expand All @@ -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;
Expand Down

0 comments on commit 5c52cac

Please sign in to comment.