---
name: "curl_multi_setopt"
section: "3"
platform: "linux"
package: "curl"
version: "8.23.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/curl_multi_setopt"
---

# curl\_multi\_setopt(3)

set options for a curl multi handle

## NAME

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

## SYNOPSIS

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

## DESCRIPTION

*[curl\_multi\_setopt(3)](/curl_multi_setopt/3.md)* is used to tell a libcurl multi handle how to behave. By using the appropriate options to *[curl\_multi\_setopt(3)](/curl_multi_setopt/3.md)*, 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

- CURLMOPT\_CHUNK\_LENGTH\_PENALTY\_SIZE

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

- CURLMOPT\_CONTENT\_LENGTH\_PENALTY\_SIZE

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

- CURLMOPT\_MAXCONNECTS

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

- CURLMOPT\_MAX\_CONCURRENT\_STREAMS

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

- CURLMOPT\_MAX\_HOST\_CONNECTIONS

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

- CURLMOPT\_MAX\_PIPELINE\_LENGTH

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

- CURLMOPT\_MAX\_TOTAL\_CONNECTIONS

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

- CURLMOPT\_NETWORK\_CHANGED

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

- CURLMOPT\_NOTIFYDATA

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

- CURLMOPT\_NOTIFYFUNCTION

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

- CURLMOPT\_PIPELINING

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

- CURLMOPT\_PIPELINING\_SERVER\_BL

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

- CURLMOPT\_PIPELINING\_SITE\_BL

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

- CURLMOPT\_PUSHDATA

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

- CURLMOPT\_PUSHFUNCTION

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

- CURLMOPT\_QUICK\_EXIT

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

- CURLMOPT\_RESOLVE\_THREADS\_MAX

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

- CURLMOPT\_SOCKETDATA

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

- CURLMOPT\_SOCKETFUNCTION

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

- CURLMOPT\_TIMERDATA

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

- CURLMOPT\_TIMERFUNCTION

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

## PROTOCOLS

This functionality affects all supported protocols

## 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

Added in curl 7.15.4

## 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)](/libcurl-errors/3.md)*.

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

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