FreeBSD Manual Pages
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 handles contained in the given multi handle set. It blocks until activ- ity 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 de- scriptors 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 2025-06-03 curl_multi_wait(3)
NAME | SYNOPSIS | DESCRIPTION | curl_waitfd | PROTOCOLS | EXAMPLE | AVAILABILITY | RETURN VALUE | SEE ALSO
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=curl_multi_wait&sektion=3&manpath=FreeBSD+Ports+14.3.quarterly>