Hi Daniel,
Thanks for the information, I see your point about the
scenario when there is more than one A Entry or more than one AAAA entry.
Maybe when there is just one A and just one AAAA entry it could avoid halving
the timeout before the connections are made.
I mentioned 200ms because the second parallel connection in the HappyEyeballs
algorithm is delayed by 200ms, so the connections could have an initial timeout
of ( timeout_ms - 200 )
regards
Will
-----Original Message-----
From: curl-library [mailto:[email protected]] On Behalf Of
Daniel Stenberg
Sent: 04 October 2015 23:23
To: libcurl development
Subject: Re: Happy Eyeballs connection timeout
On Thu, 1 Oct 2015, William Ward (wilward) wrote:
> Set the libcurl CURLOPT_CONNECTTIMEOUT_MS = 10000 ( 10 seconds )
>
> The observed timeout is 5200ms, shorter than expected
I could start out by saying that exactly how to deal with timeouts when there
are multiple IP addresses to try isn't exactly an easy problem.
If you have N entries to try, we don't want to waste the entire timeout time on
the first entry as the next one might work so it would be annoying to timeout
on the first one then. But that also means that you'll not spend the entire
timeout period trying the first which might surprise some users...
> In connect.c, Curl_connecthost method, line 1159, the
> timeout_ms_per_addr is halved if there is more than 1 node in the
> tempaddr linked list before any connection attempt,
>
> This will be case if there is both an A and AAAA record available for
> the FQDN
IIRC, the intent is then that it'll only spend half the allowed time trying to
connect to the first address before it moves on.
But as the A and AAAA attempts are made in parallel it should only do that for
more than one in the list of the same family.
> Since the IPV6 and IPV4 connections are done in parallel, I'm
> wondering if it is really necessary to half timeout on line 1159,
> perhaps reducing the timeout of the IPv4 attempt by
> HAPPY_EYEBALLS_TIMEOUT ( 200ms ) would be a good approach when there is more
> than one node in the tempaddr linked list.
I'm not sure what good reducing it with 200ms will do? 200ms is a very short
time to leave for something else when it comes to TCP connections.
> Also I was wondering why the connection timeout is halved again on
> line 829 when the first connection fails ? Are there cases other than
> happy eyeballs where there is more than 1 address to attempt and it is
> appropriate to half the timeout ?
Happy eyeballs is just trying A and AAAA in parallel. You can have N number of
A entries (or AAAA entries) without happy eyeballs and then we need to
distribute the allowed time somehow.
Giving up too early is certainly not good. Have you tried to improve the logic
for your tests?
--
/ daniel.haxx.se
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette: http://curl.haxx.se/mail/etiquette.html
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette: http://curl.haxx.se/mail/etiquette.html