cURL / Mailing Lists / curl-library / Single Mail


Re: curl multi problem

From: Avery Fay <>
Date: Tue, 25 Feb 2003 13:12:27 -0500

64 is not a magic number. It has something to do with how I calling
curl_multi_info_read (and subsequent calls to curl_multi_remove_handle and
curl_multi_add_handle). I rewrote this section of code and it seems to
work now. Is there a foolproof way to know when I should call
curl_multi_info_read? Right now, I check running_handles that
curl_multi_perform returns. For example, if I start up 64 connections and
running_handles comes back as 63, I figure something has happened and I
should call curl_multi_info_read to find out. Is this a valid assumption?

I also have a couple of questions about curl_multi_info_read. It looks
like it can return a number of different things. I've had it return NULL,
CURLMSG_DONE, CURLMSG_LAST, and maybe CURLMSG_NONE (not sure about that
one). In what circumstances will it return these? Especially, when will it
return NULL and CURLMSG_NONE? If there is at least one CURLMSG_DONE will
there also be one CURLMSG_LAST?

BTW, libcurl with the multi interface scales nicely. Now that I've gotten
it somewhat working, I'm running 4 processes each with 1000 simultaneous
connections for a total of 4000 simultaneous connections.

Avery Fay

Symantec Corporation
(781) 530-2489

Daniel Stenberg <>
Sent by:
02/25/2003 03:32 AM
Please respond to curl-library

        To: libcurl Mailing list <>
        Subject: Re: curl multi problem

On Mon, 24 Feb 2003, Avery Fay wrote:

> I'm currently migrating my app to the curl multi interface and I'm
having a
> problem. Basically, I add 64 easy handles to the multi handle. Call
> and the app hangs. From gdb output it looks like gettimeofday is not
> returning. Also, netstat shows 64 open connections with data in the
> queue. Does this ring a bell with anyone?

Not to me. Is the number 64 a magic limit that makes this problem appear?

I can't understand why gettimeofday() would be a problem.

(And to be honest, I've never tried this amount of connections myself but
can't see any reason why a larger amount would cause problems.)

> 1.) Is the multi interface thread safe? Can I have multiple threads each
> with their own multi handle?

Yes. The multi interface is as thread-safe as the rest of libcurl.

> 2.) After I call curl_multi_fdset, do I ever need to call it again? Does
> curl continue to use the same fdsets that I gave it?

You should basicly call curl_multi_fdset() whenever you're about to do
select(). Each easy-handle can (and will) change file handles in between

> 3.) If a function returns the error code that means I have to call
> curl_multi_perform again is it imperative that I call that before doing
> another select?

Well, it's highly recommended, not mandatory. If you select() before
it again, even though it returned CURLM_CALL_MULTI_PERFORM, libcurl may
have data locally that it should send off to the peer or to a local

 Daniel Stenberg -- curl, cURL, Curl, CURL. Groks URLs.
This email is sponsored by:ThinkGeek
Welcome to geek heaven.
This email is sponsored by:ThinkGeek
Welcome to geek heaven.
Received on 2003-02-25