Add "Happy Eyeballs" for IPv4/IPv6.
This patch invokes two socket connect()s nearly simultaneously, and the socket that is first connected "wins" and is subsequently used for the connection. The other is terminated. There is a very slight IPv4 preference, in that if both sockets connect simultaneously IPv4 is checked first and thus will win.
This commit is contained in:

committed by
Daniel Stenberg

parent
7de4cc35f8
commit
7d7df83198
@@ -3260,7 +3260,6 @@ static CURLcode ConnectPlease(struct SessionHandle *data,
|
||||
bool *connected)
|
||||
{
|
||||
CURLcode result;
|
||||
Curl_addrinfo *addr;
|
||||
#ifndef CURL_DISABLE_VERBOSE_STRINGS
|
||||
char *hostname = conn->bits.proxy?conn->proxy.name:conn->host.name;
|
||||
|
||||
@@ -3276,13 +3275,8 @@ static CURLcode ConnectPlease(struct SessionHandle *data,
|
||||
*************************************************************/
|
||||
result= Curl_connecthost(conn,
|
||||
conn->dns_entry,
|
||||
&conn->sock[FIRSTSOCKET],
|
||||
&addr,
|
||||
connected);
|
||||
if(CURLE_OK == result) {
|
||||
/* All is cool, we store the current information */
|
||||
conn->ip_addr = addr;
|
||||
|
||||
if(*connected) {
|
||||
result = Curl_connected_proxy(conn, FIRSTSOCKET);
|
||||
if(!result) {
|
||||
@@ -5643,8 +5637,8 @@ CURLcode Curl_setup_conn(struct connectdata *conn,
|
||||
Curl_pgrsTime(data, TIMER_APPCONNECT); /* we're connected already */
|
||||
conn->bits.tcpconnect[FIRSTSOCKET] = TRUE;
|
||||
*protocol_done = TRUE;
|
||||
Curl_verboseconnect(conn);
|
||||
Curl_updateconninfo(conn, conn->sock[FIRSTSOCKET]);
|
||||
Curl_verboseconnect(conn);
|
||||
}
|
||||
/* Stop the loop now */
|
||||
break;
|
||||
|
Reference in New Issue
Block a user