.\" generated by cd2nroff 0.1 from curl_multi_socket.md .TH curl_multi_socket 3 "2025-07-07" libcurl .SH NAME curl_multi_socket \- read/write available data .SH SYNOPSIS .nf #include CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t sockfd, int *running_handles); .fi .SH DESCRIPTION This function is deprecated. Use \fIcurl_multi_socket_action(3)\fP instead with \fBev_bitmask\fP set to 0. At return, the integer \fBrunning_handles\fP points to contains the number of still running easy handles within the multi handle. When this number reaches zero, all transfers are complete/done. Note that when you call \fIcurl_multi_socket(3)\fP on a specific socket and the counter decreases by one, it DOES NOT necessarily mean that this exact socket/transfer is the one that completed. Use \fIcurl_multi_info_read(3)\fP to figure out which easy handle that completed. The \fIcurl_multi_socket(3)\fP functions inform the application about updates in the socket (file descriptor) status by doing none, one, or multiple calls to the socket callback function set with the \fICURLMOPT_SOCKETFUNCTION(3)\fP option to \fIcurl_multi_setopt(3)\fP. They update the status with changes since the previous time the callback was called. Get the timeout time by setting the \fICURLMOPT_TIMERFUNCTION(3)\fP option with \fIcurl_multi_setopt(3)\fP. Your application then gets called with information on how long to wait for socket actions at most before doing the timeout action: call the \fIcurl_multi_socket_action(3)\fP function with the \fBsockfd\fP argument set to CURL_SOCKET_TIMEOUT. You can also use the \fIcurl_multi_timeout(3)\fP function to poll the value at any given time, but for an event\-based system using the callback is far better than relying on polling the timeout value. .SH PROTOCOLS This functionality affects all supported protocols .SH EXAMPLE .nf int main(void) { /* the event-library gets told when there activity on the socket 'fd', which we translate to a call to curl_multi_socket_action() */ int running; int rc; int fd = 2; CURLM *multi = curl_multi_init(); rc = curl_multi_socket(multi, fd, &running); } .fi .SH DEPRECATED \fIcurl_multi_socket(3)\fP is deprecated, use \fIcurl_multi_socket_action(3)\fP instead. .SH AVAILABILITY Added in curl 7.15.4 .SH 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 \fIlibcurl\-errors(3)\fP. 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. .SH SEE ALSO .BR curl_multi_cleanup (3), .BR curl_multi_fdset (3), .BR curl_multi_info_read (3), .BR curl_multi_init (3), .BR the hiperfifo.c example