A few weeks after writing that CURLOPT_TIMEOUT of zero is never the right value, I typed it in myself. An itinerary build streams for several minutes with live searches in the middle, and a 300-second total cap was cutting off a stream that was still delivering. A total timeout can’t tell working from dead — both look like still open, still not finished. So measure silence instead: no total cap, and a low-speed watchdog that gives up after two minutes below a byte a second. That only works because the upstream sends pings while it thinks, so check before you lean on it. Match the timeout to the thing you’re actually measuring.
Read more "I set CURLOPT_TIMEOUT back to zero. On purpose this time."
