cURL / Mailing Lists / curl-library / Single Mail

curl-library

Re: Error CURLE_GOT_NOTHING(52) under http GET load test

From: Daniel Stenberg <daniel_at_haxx.se>
Date: Fri, 14 Jun 2002 13:19:56 +0200 (MET DST)

On Thu, 13 Jun 2002, Gustaf Hui wrote:

> I am using the multi interface to perform http GET requests through a proxy
> (Apache 1.3.24), running on Red Hat 7.2, and I am consistently running into
> the same fetch error CURLE_GOT_NOTHING(52). For the last load test I did,
> this error happened 4 times out of ~240000 requests, and they seem to occur
> randomly with respect to time.

Oh! :-( This is of course not good, and a heck of a problem to search for...

> First the request is prepared (exactly the same way for all requests) with a
> easy handle and added to a multi handle. Then to initiate the request,
> curl_multi_perform() is called within a loop,
> while ( CURLM_CALL_MULTI_PERFORM == status )
> {
> status = curl_multi_perform(m_CUrlMultiHandle, &m_nActiveHandle);
> }

Is this actually a wise loop? I mean, there are cases in which
curl_multi_perform() doesn't return CURLM_CALL_MULTI_PERFORM... (No, it is
probably not related to the problem you're seeing.)

> and unlike the normal cases, the fetch is completed within this loop. The
> logs I get in this loop are:
> 2002-06-13 06:37:22.253| Re-using existing connection! (#0)
> 2002-06-13 06:37:22.253| Connected to [re-used] (127.0.0.1) port 8080
> 2002-06-13 06:37:22.254| Connection #0 left intact
> And the easy handle return code is CURLE_GOT_NOTHING.

Ok, so let's track this backwards from the point where it finds out and sets
the CURLE_GOT_NOTHING return code. Insert some suitable extra debug code
somewhere along this chain:

The CURLE_GOT_NOTHING return code is set in Curl_http_done(), which is called
after a supposed (single) HTTP transfer from Curl_done(), using the function
pointer conn->curl_done()).

This gets called from multi.c:319, when leaving the CURLM_STATE_PERFORM state
for the single easy handle. That is made when Curl_readwrite() says it is
"done". It considers itself done when the 'keepon' struct field is cleared.
The 'keepon' clears its read-bit KEEP_READ (as you're downloading here) when
reading a 0 or -1 from the socket...

> I have checked the proxy access log, and the proxy doesn't seem to receive
> anything for this particular request.

You mean no request being sent to it or no data being received?

-- 
    Daniel Stenberg -- curl groks URLs -- http://curl.haxx.se/
_______________________________________________________________
Don't miss the 2002 Sprint PCS Application Developer's Conference
August 25-28 in Las Vegas - http://devcon.sprintpcs.com/adp/index.cfm?source=osdntextlink
Received on 2002-06-14