Provided by: libcurl4-doc_7.81.0-1ubuntu1.20_all bug

NAME

       curl_multi_info_read - read multi stack informationals

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/informationals from the individual transfers. Messages may
       include  informationals  such  as  an  error  code  from the transfer or just the fact that a transfer is
       completed. More details on these should be written down as well.

       Repeated calls to this function will return 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 will contain the
       number of remaining messages after this function was called.

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

       WARNING: The data the  returned  pointer  points  to  will  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 just completed.

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

EXAMPLE

       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_handle, &msgq);
         if(m && (m->msg == CURLMSG_DONE)) {
           CURL *e = m->easy_handle;
           transfers--;
           curl_multi_remove_handle(multi_handle, e);
           curl_easy_cleanup(e);
         }
       } while(m);

AVAILABILITY

       Added in 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 7.81.0                                  November 26, 2021                        curl_multi_info_read(3)