curl\_multi\_setopt(3) Library Functions Manual curl\_multi\_setopt(3)

# [NAME](#NAME)

curl\_multi\_setopt - set options for a curl multi handle

# [SYNOPSIS](#SYNOPSIS)

```
#include <curl/curl.h>
CURLMcode curl_multi_setopt(CURLM *multi, CURLMoption option, parameter);
```

# [DESCRIPTION](#DESCRIPTION)

[*curl\_multi\_setopt(3)*](/man/os/curl/curl_multi_setopt.3) is used to tell a libcurl multi handle how to behave. By using the appropriate options to [*curl\_multi\_setopt(3)*](/man/os/curl/curl_multi_setopt.3), you can change libcurl's behavior when using that multi handle. All options are set with the *option* followed by the *parameter*. That parameter can be a **long**, a **function pointer**, an **object pointer** or a **curl\_off\_t** type, depending on what the specific option expects. Read this manual carefully as bad input values may cause libcurl to behave badly. You can only set one option in each function call.

# [OPTIONS](#OPTIONS)

[CURLMOPT\_CHUNK\_LENGTH\_PENALTY\_SIZE](#CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE)

**deprecated** See [*CURLMOPT\_CHUNK\_LENGTH\_PENALTY\_SIZE(3)*](/man/os/curl/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3)

[CURLMOPT\_CONTENT\_LENGTH\_PENALTY\_SIZE](#CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE)

**deprecated** See [*CURLMOPT\_CONTENT\_LENGTH\_PENALTY\_SIZE(3)*](/man/os/curl/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3)

[CURLMOPT\_MAXCONNECTS](#CURLMOPT_MAXCONNECTS)

Size of connection cache. See [*CURLMOPT\_MAXCONNECTS(3)*](/man/os/curl/CURLMOPT_MAXCONNECTS.3)

[CURLMOPT\_MAX\_CONCURRENT\_STREAMS](#CURLMOPT_MAX_CONCURRENT_STREAMS)

Max concurrent streams for http2. See [*CURLMOPT\_MAX\_CONCURRENT\_STREAMS(3)*](/man/os/curl/CURLMOPT_MAX_CONCURRENT_STREAMS.3)

[CURLMOPT\_MAX\_HOST\_CONNECTIONS](#CURLMOPT_MAX_HOST_CONNECTIONS)

Max number of connections to a single host. See [*CURLMOPT\_MAX\_HOST\_CONNECTIONS(3)*](/man/os/curl/CURLMOPT_MAX_HOST_CONNECTIONS.3)

[CURLMOPT\_MAX\_PIPELINE\_LENGTH](#CURLMOPT_MAX_PIPELINE_LENGTH)

**deprecated**. See [*CURLMOPT\_MAX\_PIPELINE\_LENGTH(3)*](/man/os/curl/CURLMOPT_MAX_PIPELINE_LENGTH.3)

[CURLMOPT\_MAX\_TOTAL\_CONNECTIONS](#CURLMOPT_MAX_TOTAL_CONNECTIONS)

Max simultaneously open connections. See [*CURLMOPT\_MAX\_TOTAL\_CONNECTIONS(3)*](/man/os/curl/CURLMOPT_MAX_TOTAL_CONNECTIONS.3)

[CURLMOPT\_NETWORK\_CHANGED](#CURLMOPT_NETWORK_CHANGED)

Signal that the network has changed. See [*CURLMOPT\_NETWORK\_CHANGED(3)*](/man/os/curl/CURLMOPT_NETWORK_CHANGED.3)

[CURLMOPT\_NOTIFYDATA](#CURLMOPT_NOTIFYDATA)

Custom pointer passed to the notify callback. See [*CURLMOPT\_NOTIFYDATA(3)*](/man/os/curl/CURLMOPT_NOTIFYDATA.3)

[CURLMOPT\_NOTIFYFUNCTION](#CURLMOPT_NOTIFYFUNCTION)

Callback that receives notifications. See [*CURLMOPT\_NOTIFYFUNCTION(3)*](/man/os/curl/CURLMOPT_NOTIFYFUNCTION.3)

[CURLMOPT\_PIPELINING](#CURLMOPT_PIPELINING)

Enable HTTP multiplexing. See [*CURLMOPT\_PIPELINING(3)*](/man/os/curl/CURLMOPT_PIPELINING.3)

[CURLMOPT\_PIPELINING\_SERVER\_BL](#CURLMOPT_PIPELINING_SERVER_BL)

**deprecated**. See [*CURLMOPT\_PIPELINING\_SERVER\_BL(3)*](/man/os/curl/CURLMOPT_PIPELINING_SERVER_BL.3)

[CURLMOPT\_PIPELINING\_SITE\_BL](#CURLMOPT_PIPELINING_SITE_BL)

**deprecated**. See [*CURLMOPT\_PIPELINING\_SITE\_BL(3)*](/man/os/curl/CURLMOPT_PIPELINING_SITE_BL.3)

[CURLMOPT\_PUSHDATA](#CURLMOPT_PUSHDATA)

Pointer to pass to push callback. See [*CURLMOPT\_PUSHDATA(3)*](/man/os/curl/CURLMOPT_PUSHDATA.3)

[CURLMOPT\_PUSHFUNCTION](#CURLMOPT_PUSHFUNCTION)

Callback that approves or denies server pushes. See [*CURLMOPT\_PUSHFUNCTION(3)*](/man/os/curl/CURLMOPT_PUSHFUNCTION.3)

[CURLMOPT\_QUICK\_EXIT](#CURLMOPT_QUICK_EXIT)

Enable a quicker cleanup of the multi handle. See [*CURLMOPT\_QUICK\_EXIT(3)*](/man/os/curl/CURLMOPT_QUICK_EXIT.3)

[CURLMOPT\_RESOLVE\_THREADS\_MAX](#CURLMOPT_RESOLVE_THREADS_MAX)

Max threads used for threaded DNS resolver. See [*CURLMOPT\_RESOLVE\_THREADS\_MAX(3)*](/man/os/curl/CURLMOPT_RESOLVE_THREADS_MAX.3)

[CURLMOPT\_SOCKETDATA](#CURLMOPT_SOCKETDATA)

Custom pointer passed to the socket callback. See [*CURLMOPT\_SOCKETDATA(3)*](/man/os/curl/CURLMOPT_SOCKETDATA.3)

[CURLMOPT\_SOCKETFUNCTION](#CURLMOPT_SOCKETFUNCTION)

Callback informed about what to wait for. See [*CURLMOPT\_SOCKETFUNCTION(3)*](/man/os/curl/CURLMOPT_SOCKETFUNCTION.3)

[CURLMOPT\_TIMERDATA](#CURLMOPT_TIMERDATA)

Custom pointer to pass to timer callback. See [*CURLMOPT\_TIMERDATA(3)*](/man/os/curl/CURLMOPT_TIMERDATA.3)

[CURLMOPT\_TIMERFUNCTION](#CURLMOPT_TIMERFUNCTION)

Callback to receive timeout values. See [*CURLMOPT\_TIMERFUNCTION(3)*](/man/os/curl/CURLMOPT_TIMERFUNCTION.3)

# [PROTOCOLS](#PROTOCOLS)

This functionality affects all supported protocols

# [EXAMPLE](#EXAMPLE)

```
#define MAX_PARALLEL 45
int main(void)
{


  CURLM *multi = curl_multi_init();


  /* Limit the amount of simultaneous connections curl should allow: */


  curl_multi_setopt(multi, CURLMOPT_MAXCONNECTS, (long)MAX_PARALLEL);
}
```

# [AVAILABILITY](#AVAILABILITY)

Added in curl 7.15.4

# [RETURN VALUE](#RETURN_VALUE)

This function returns a CURLMcode indicating success or error.

CURLM\_OK (0) means everything was OK, non-zero means an error occurred, see [*libcurl-errors(3)*](/man/os/curl/libcurl-errors.3).

Note that it returns a CURLM\_UNKNOWN\_OPTION if you try setting an option that this version of libcurl does not know of.

# [SEE ALSO](#SEE_ALSO)

[**curl\_multi\_cleanup**(3)](/man/os/curl/curl_multi_cleanup.3), [**curl\_multi\_info\_read**(3)](/man/os/curl/curl_multi_info_read.3), [**curl\_multi\_init**(3)](/man/os/curl/curl_multi_init.3), [**curl\_multi\_socket**(3)](/man/os/curl/curl_multi_socket.3)

2026-10-01 libcurl

---

Document: curl_multi_setopt(3) from curl 8.22.0-r4 (Chainguard OS)
Source: https://github.com/curl/curl.git
