---
name: "curl_multi_socket_all"
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_socket_all"
---

# curl\_multi\_socket\_all(3)

reads/writes available data for all easy handles

## NAME

curl\_multi\_socket\_all - reads/writes available data for all easy handles

## SYNOPSIS

```
#include <curl/curl.h>
CURLMcode curl_multi_socket_all(CURLM *multi_handle,
                                int *running_handles);
```

## DESCRIPTION

This function is deprecated for performance reasons but there are no plans to remove it from the API. Use *[curl\_multi\_socket\_action(3)](/curl_multi_socket_action/3.md)* instead.

At return, the integer **running\_handles** points to contains the number of still running easy handles within the multi handle. When this number reaches zero, all transfers are complete/done.

Force libcurl to (re-)check all its internal sockets and transfers instead of a single one by calling *[curl\_multi\_socket\_all(3)](/curl_multi_socket_all/3.md)*. Note that there should not be any reason to use this function.

## PROTOCOLS

This functionality affects all supported protocols

## EXAMPLE

```
int main(void)
{
  int running;
  int rc;
  CURLM *multi = curl_multi_init();
  rc = curl_multi_socket_all(multi, &running);
}
```

## 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)*.

The return code is for the whole multi stack. Problems still might have occurred on individual transfers even when one of these functions return OK.

## SEE ALSO

[**curl\_multi\_cleanup**(3)](/curl_multi_cleanup/3.md), [**curl\_multi\_fdset**(3)](/curl_multi_fdset/3.md), [**curl\_multi\_info\_read**(3)](/curl_multi_info_read/3.md), [**curl\_multi\_init**(3)](/curl_multi_init/3.md), **the**hiperfifo.c**example**
