CURLOPT_TIMEOUT(3)

๐Ÿ’– CURLOPT_TIMEOUT(3) ๐Ÿ’–

okay so bestie, this is the libcurl page from the Library Functions Manual, and it's all about CURLOPT_TIMEOUT(3) โ€” maximum time the transfer is allowed to complete. it's giving โ€œput a timer on the whole entire thingโ€ energy โณโœจ

๐ŸŒธ NAME ๐ŸŒธ

CURLOPT_TIMEOUT โ€” maximum time the transfer is allowed to complete.

โœจ SYNOPSIS โœจ

#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEOUT, long timeout);

๐Ÿฆ‹ DESCRIPTION ๐Ÿฆ‹

Pass a long as the parameter containing timeout โ€” the maximum time in seconds that you allow the entire transfer operation to take. the whole thing, from start to end. Normally, name lookups can take a considerable time and limiting operations risk aborting perfectly normal operations ๐Ÿ˜ญ.

CURLOPT_TIMEOUT_MS(3) is the same function but set in milliseconds. If both CURLOPT_TIMEOUT(3) and CURLOPT_TIMEOUT_MS(3) are set, the value set last is used. fr fr, last one wins ๐Ÿ’….

Since this option puts a hard limit on how long time a request is allowed to take, it has limited use in dynamic use cases with varying transfer times. That is especially apparent when using multi interface, which may queue the transfer, and that time is included. You are advised to explore CURLOPT_LOW_SPEED_LIMIT(3), CURLOPT_LOW_SPEED_TIME(3) or using CURLOPT_PROGRESSFUNCTION(3) to implement your own timeout logic. iykyk ๐Ÿซถ

The connection timeout set with CURLOPT_CONNECTTIMEOUT(3) is included in this general all-covering timeout.

With CURLOPT_CONNECTTIMEOUT(3) set to 3 and CURLOPT_TIMEOUT(3) set to 5, the operation can never last longer than 5 seconds.

With CURLOPT_CONNECTTIMEOUT(3) set to 4 and CURLOPT_TIMEOUT(3) set to 2, the operation can never last longer than 2 seconds. math is mathing ๐Ÿงฎโœจ

heads up bestie โš ๏ธ This option may cause libcurl to use the SIGALRM signal to timeout system calls on builds not using asynch DNS. In Unix-like systems, this might cause signals to be used unless CURLOPT_NOSIGNAL(3) is set.

๐ŸŽ€ DEFAULT ๐ŸŽ€

0 (zero) โ€” which means it never times out during transfer. periodt ๐Ÿ’ค

๐ŸŒˆ PROTOCOLS ๐ŸŒˆ

This functionality affects all supported protocols. all of them, no cap ๐ŸŒˆ

๐Ÿ“ EXAMPLE ๐Ÿ“

int main(void)
{
  CURL *curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");

    /* complete within 20 seconds */
    curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20L);

    curl_easy_perform(curl);
  }
}

๐Ÿ‘‘ AVAILABILITY ๐Ÿ‘‘

Added in curl 7.1 โ€” iconic behavior, honestly ๐Ÿ‘‘

๐Ÿ’œ RETURN VALUE ๐Ÿ’œ

curl_easy_setopt(3) returns a CURLcode indicating success or error.

CURLE_OK (0) means everything was OK, non-zero means an error occurred, see libcurl-errors(3). zero = slay, non-zero = something went sideways ๐Ÿ˜ญ

๐Ÿงš SEE ALSO ๐Ÿงš


byeee bestie ๐Ÿ’– โ€” this libcurl manual page, dated 2026-10-12, is signing off ๐ŸŽ€

๐Ÿ“ฆ where this page comes from