Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
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)

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>

home | help