curl_multi_wait(3) Library Functions Manual curl_multi_wait(3)
NAME
curl_multi_wait - poll on all easy handles in a multi handle
SYNOPSIS
#include <curl/curl.h>
CURLMcode curl_multi_wait(CURLM *multi_handle,
struct curl_waitfd extra_fds[],
unsigned int extra_nfds,
int timeout_ms,
int *numfds);
DESCRIPTION
curl_multi_wait(3) polls all file descriptors used by the curl easy han-
dles contained in the given multi handle set. It blocks until activity
is detected on at least one of the handles or timeout_ms has passed.
Alternatively, if the multi handle has a pending internal timeout that
has a shorter expiry time than timeout_ms, that shorter time is being
used instead to make sure timeout accuracy is reasonably kept.
The calling application may pass additional curl_waitfd structures which
are similar to poll(2)'s pollfd structure to be waited on in the same
call.
On completion, if numfds is non-NULL, it gets populated with the total
number of file descriptors on which interesting events occurred. This
number can include both libcurl internal descriptors as well as descrip-
tors provided in extra_fds.
If no extra file descriptors are provided and libcurl has no file de-
scriptor to offer to wait for, this function returns immediately. (Con-
sider using curl_multi_poll(3) to avoid this behavior.)
This function is encouraged to be used instead of select(3) when using
the multi interface to allow applications to easier circumvent the com-
mon problem with 1024 maximum file descriptors.
curl_waitfd
struct curl_waitfd {
curl_socket_t fd;
short events;
short revents;
};
CURL_WAIT_POLLIN
Bit flag to curl_waitfd.events indicating the socket should poll
on read events such as new data received.
CURL_WAIT_POLLPRI
Bit flag to curl_waitfd.events indicating the socket should poll
on high priority read events such as out of band data.
CURL_WAIT_POLLOUT
Bit flag to curl_waitfd.events indicating the socket should poll
on write events such as the socket being clear to write without
blocking.
PROTOCOLS
This functionality affects all supported protocols
EXAMPLE
int main(void)
{
CURL *easy;
CURLM *multi = curl_multi_init();
int still_running;
easy = curl_easy_init();
/* add the individual easy handle */
curl_multi_add_handle(multi, easy);
do {
CURLMcode mc;
int numfds;
mc = curl_multi_perform(multi, &still_running);
if(mc == CURLM_OK) {
/* wait for activity, timeout or "nothing" */
mc = curl_multi_wait(multi, NULL, 0, 1000, &numfds);
}
if(mc != CURLM_OK) {
fprintf(stderr, "curl_multi failed, code %d.\n", mc);
break;
}
} while(still_running);
curl_multi_remove_handle(multi, easy);
}
AVAILABILITY
Added in curl 7.28.0
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).
SEE ALSO
curl_multi_fdset(3), curl_multi_perform(3), curl_multi_poll(3)
libcurl 2026-07-12 curl_multi_wait(3)
Generated by dwww version 1.16 on Sat Oct 3 05:45:27 CEST 2026.