On Fri, Dec 24, 2010 at 04:05:27PM +0800, Dannoy Lee wrote:
> Hi,
>    Dan,thank you for answer me so quickly.Here I try to make the things more
> specific.
>    First, I try persistant.c(I modified it a bit , see attachment) example 
> with
> my modified mongoose http server without authentication and following 
> location.
> And my persistant runs well.
>    Second, I add authentication and "Location" header to response client
> request, my persistant hangs.

That's because the server sends an incomplete response, and libcurl
(rightly) waits for it to complete.  Take a look at the log:

> And here is the BAD log:
> 
> [...@localhost bad]$ ./persist
> * About to connect() to localhost port 8081 (#0)
> *   Trying 127.0.0.1... * connected
> * Connected to localhost (127.0.0.1) port 8081 (#0)
> * Server auth using Digest with user 'lijin'
> > GET /my HTTP/1.1
> Host: localhost:8081
> Accept: */*
> 
> < HTTP/1.1 401 Unauthorized
> HTTP/1.1 401 Unauthorized
> < WWW-Authenticate: Digest qop="auth", realm="[email protected]", nonce=
> "1293176855"
> WWW-Authenticate: Digest qop="auth", realm="[email protected]", 
> nonce="1293176855"
> * no chunk, no close, no size. Assume close to signal end

As the debug message helpfully points out, the HTTP response does not
include a chunk header, nor a content length, nor a connection close
indication. Since the server provides no way to tell the end of the
response, libcurl assumes a Connection:close and simply waits for the socket
close. As far as it's concerned, the server may be about to send a
nicely formatted error message that the application wishes to receive,
so there is no other choice but to wait for it. Needless to say, that
never comes.

You need to fix the server so it sends a correct response.

>>> Dan
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette:  http://curl.haxx.se/mail/etiquette.html

Reply via email to