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

FreeBSD Manual Pages

  
 
  

home | help
curl_multi_info_read(3)     Library Functions Manual	 curl_multi_info_read(3)

NAME
     curl_multi_info_read - read multi stack information

SYNOPSIS
     #include <curl/curl.h>

     CURLMsg *curl_multi_info_read(CURLM *multi_handle, int *msgs_in_queue);

DESCRIPTION
     Ask  the  multi handle if there are any messages from the individual trans-
     fers.  Messages may include information such as  an  error  code  from  the
     transfer  or  the	fact that a transfer is completed. More details on these
     should be written down as well.

     Repeated calls to this function returns a new struct  each  time,	until  a
     NULL  is  returned  as a signal that there is no more to get at this point.
     The integer pointed to with msgs_in_queue contains the number of  remaining
     messages after this function was called.

     When you fetch a message using this function, it is removed from the inter-
     nal  queue  so calling this function again does not return the same message
     again. It instead returns new messages at each new invoke until  the  queue
     is emptied.

     WARNING:  The  data the returned pointer points to does not survive calling
     curl_multi_cleanup(3), curl_multi_remove_handle(3) or curl_easy_cleanup(3).

     The CURLMsg struct is simple and only contains basic information.	If  more
     involved  information is wanted, the particular "easy handle" is present in
     that struct and can be  used  in  subsequent  regular  curl_easy_getinfo(3)
     calls (or similar):

     struct CURLMsg {
       CURLMSG msg;	  /* what this message means */
       CURL *easy_handle; /* the handle it concerns */
       union {
	 void *whatever;    /* message-specific data */
	 CURLcode result;   /* return code for transfer */
       } data;
     };

     When  msg	is CURLMSG_DONE, the message identifies a transfer that is done,
     and then result contains the return code for  the	easy  handle  that  com-
     pleted.

     At this point, there are no other msg types defined.

PROTOCOLS
     This functionality affects all supported protocols

EXAMPLE
     int main(void)
     {
       CURLM *multi = curl_multi_init();
       CURL *curl = curl_easy_init();
       if(curl) {
	 struct CURLMsg *m;

	 /* call curl_multi_perform or curl_multi_socket_action first, then loop
	    through and check if there are any transfers that have completed */

	 do {
	   int msgq = 0;
	   m = curl_multi_info_read(multi, &msgq);
	   if(m && (m->msg == CURLMSG_DONE)) {
	     CURL *e = m->easy_handle;
	     /* m->data.result holds the error code for the transfer */
	     curl_multi_remove_handle(multi, e);
	     curl_easy_cleanup(e);
	   }
	 } while(m);
       }
     }

AVAILABILITY
     Added in curl 7.9.6

RETURN VALUE
     A	pointer  to  a	filled-in  struct,  or	NULL  if it failed or ran out of
     structs.  It also writes the number of messages left in  the  queue  (after
     this read) in the integer the second argument points to.

SEE ALSO
     curl_multi_cleanup(3), curl_multi_init(3), curl_multi_perform(3)

libcurl 			   2026-06-11		 curl_multi_info_read(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=curl_multi_info_read&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help