           curl_multi_perform - reads/writes available data from each
           easy handle

## SYNOPSIS

           #include <curl/curl.h>

           CURLMcode  curl_multi_perform(CURLM   *multi_handle,   int
           *running_handles);

## DESCRIPTION

           When  the  app  thinks  there's  data  available  for  the
           multi_handle, it should call this function  to  read/write
           whatever   there   is   to   read   or  write  right  now.
           curl_multi_perform() returns as soon as  the  reads/writes
           are  done. This function does not require that there actu-
           ally is any data available for reading or that data can be
           written,  it can be called just in case. It will write the
           number of handles that still transfer data in  the  second
           argument's integer-pointer.

## RETURN VALUE

           CURLMcode  type,  general  libcurl  multi  interface error
           code.

           If  you  receive  CURLM_CALL_MULTI_PERFORM,  this  basicly
           means  that  you  should  call  curl_multi_perform  again,
           before you select() on more actions. You don't have to  do
           it immediately, but the return code means that libcurl may
           have more data available to return or that  there  may  be
           more data to send off before it is "satisfied".

           NOTE that this only returns errors etc regarding the whole
           multi stack. There might still have occurred  problems  on
           invidual transfers even when this function returns OK.

## TYPICAL USAGE

           Most  application  will  use  curl_multi_fdset  to get the
           multi_handle's  file  descriptors,  then  it'll  wait  for
           action  on  them using select() and as soon as one or more
           of them are ready, curl_multi_perform gets called.

## SEE ALSO

           curl_multi_cleanup(3),curl_multi_init(3)