On Wed, 9 Mar 2016, Boutin Maël wrote:

Ok for  curl_multi_info_read. I changed my code as follow :

   curlret = curl_multi_perform(m_pstCurlMultiHandle, &iRunningFDs);
   if (!iRunningFDs)
   {
     usleep(10000);
   }

Why do you sleep when there's no more transfers running?

       /* wait for activity, timeout or "nothing" */
       curlret = curl_multi_wait(m_pstCurlMultiHandle, NULL, 0, 10000,
&iWaitFDs);
       if (iWaitFDs)
       {
         struct CURLMsg *m;
         do {
           int msgq = 0;
           m = curl_multi_info_read(m_pstCurlMultiHandle, &msgq);

Why do you check the queue only when curl_multi_wait() told you there's socket acivity? Transfers can end without that (due to timeouts etc)!

However this does not work, as multi_wait will here "wait" for the duration.

If there's no socket activity, sure.

I dont want this behaviour because the data to be sent are coming from another thread and i want to send them as soon as they are available.

Make it wait for another socket/pipe that you signal on from that other thread when data arrives? Or perhaps if you want it simpler: make the max waiting time fairly short and then check for data and then loop.

--

 / daniel.haxx.se
-------------------------------------------------------------------
List admin: https://cool.haxx.se/list/listinfo/curl-library
Etiquette:  https://curl.haxx.se/mail/etiquette.html

Reply via email to