On Sat, 9 Jan 2021, Midnight Wonderer via curl-library wrote:

Regarding CURLOPT_CONNECTTIMEOUT_MS option, I found out that the timeout set is shared between multiple hosts. Not only that, the allotment is weird, IMO.

One person's sensible is another person's weird... This is the middle-way: both sensible and weird.

If you set the connection timeout to 3 seconds, the first server gets 1.5s budget; the second one gets 750ms, the third 375ms, and so on.

Don't get me wrong; I think splitting into [timeout]/N is equally weird too. What I actually expect from the connection timeout is: it should be applied per connection.

There's just no way to satisfy every possible request and desire without overloading libcurl with even more options.

- Users expect the timeout to expire after the given time, so if the host has N addresses, they still don't want the timeout to be multiplied with N.

- Users expect that just because one out of the N IP addresses is dead, the timeout shouldn't needlessly expire and leave the user thinking all addresses are inaccessible.

These two expectations don't work in combination with: "curl should spend the entire connection timeout-out time trying to connect to the first IP address". We simply felt a need to compromise a little.

(Once I attended a meeting with lots of HTTP people, where it was suggested that maybe clients would be better off happy-eyevalling *every* IP address that is returned - connect to all of them at once and stick only to the one that connects the fastest... which would also solve this timeout issue!)

For instance, if I set the timeout to 1s, I expect connection timeouts of 1s for each try. This is also the behavior of Nginx when used as a reverse proxy.

So what does nginx do when the first IP address just silently drops all TCP packets? Fail the connection after one second even if there are also 9 working IP addresses?

--

 / daniel.haxx.se
 | Commercial curl support up to 24x7 is available!
 | Private help, bug fixes, support, ports, new features
 | https://www.wolfssl.com/contact/
-------------------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
Etiquette:   https://curl.se/mail/etiquette.html

Reply via email to