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
@@ -838,6 +838,7 @@ struct connectdata {
|
||||
within the DNS cache, so this pointer is only valid as long as the DNS
|
||||
cache entry remains locked. It gets unlocked in Curl_done() */
|
||||
Curl_addrinfo *ip_addr;
|
||||
Curl_addrinfo *tempaddr[2]; /* for happy eyeballs */
|
||||
|
||||
/* 'ip_addr_str' is the ip_addr data as a human readable string.
|
||||
It remains available as long as the connection does, which is longer than
|
||||
@@ -889,6 +890,7 @@ struct connectdata {
|
||||
struct timeval created; /* creation time */
|
||||
curl_socket_t sock[2]; /* two sockets, the second is used for the data
|
||||
transfer when doing FTP */
|
||||
curl_socket_t tempsock[2]; /* temporary sockets for happy eyeballs */
|
||||
bool sock_accepted[2]; /* TRUE if the socket on this index was created with
|
||||
accept() */
|
||||
Curl_recv *recv[2];
|
||||
|
||||
Reference in New Issue
Block a user