diff options
| author | Bill Hoffman <bill.hoffman@kitware.com> | 2010-03-24 14:19:50 -0400 | 
|---|---|---|
| committer | Bill Hoffman <bill.hoffman@kitware.com> | 2010-03-24 14:19:50 -0400 | 
| commit | 481c61d06082195d7ce8ab6cc21ce274e54b2aa4 (patch) | |
| tree | 266e634cfe741240b8cd3f06402a1cee074f1e1a | |
| parent | ff438c994ebbbb63eda83ca34e2bbe8e3f6dfbf3 (diff) | |
| parent | 05632d5db9b67264826c53d99eaa81943e36275c (diff) | |
Merge branch 'master' of github.com:bagder/curl
| -rw-r--r-- | CHANGES | 11 | ||||
| -rw-r--r-- | RELEASE-NOTES | 4 | ||||
| -rw-r--r-- | lib/hostip.c | 2 | ||||
| -rw-r--r-- | lib/transfer.c | 27 | ||||
| -rw-r--r-- | tests/libtest/lib572.c | 6 | 
5 files changed, 29 insertions, 21 deletions
| @@ -7,6 +7,17 @@                                    Changelog  Daniel Stenberg (24 Mar 2010) +- Bob Richmond: There's an annoying situation where libcurl will read new HTTP +  response data from a socket, then check if it's a timeout if one is set. If +  the last packet received constitutes the end of the response body, libcurl +  still treats it as a timeout condition and reports a message like: + +  "Operation timed out after 3000 milliseconds with 876 out of 876 bytes  +  received" + +  It should only a timeout if the timer lapsed and we DIDN'T receive the end +  of the response body yet. +  - Christopher Conroy fixed a problem with RTSP and GET_PARAMETER reported    to us by Massimo Callegari. There's a new test case 572 that verifies this    now. diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 9c6775ff2..b2134027d 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -40,6 +40,7 @@ This release includes the following bugfixes:   o chunked-encoding with Content-Length: header problem   o multi interface HTTP POST over a proxy using PROXYTUNNEL   o RTSP GET_PARAMETER + o timeout after last data chunk was handled  This release includes the following known bugs: @@ -52,6 +53,7 @@ advice from friends like these:   Daniel Fandrich, Patrick Monnerat, Pat Ray, Wesley Miaw, Ben Greear,   Ryan Chan, Markus Duft, Andrei Benea, Jacob Moshenko, Daniel Johnson,   Constantine Sapuntzakis, Douglas Steinwand, Thomas Lopatic, Hauke Duden, - Akos Pasztory, Kenny To, Christopher Conroy, Massimo Callegari + Akos Pasztory, Kenny To, Christopher Conroy, Massimo Callegari, + Bob Richmond          Thanks! (and sorry if I forgot to mention someone) diff --git a/lib/hostip.c b/lib/hostip.c index 04a29a754..e34fd5a99 100644 --- a/lib/hostip.c +++ b/lib/hostip.c @@ -624,9 +624,9 @@ int Curl_resolv_timeout(struct connectdata *conn,     */    rc = Curl_resolv(conn, hostname, port, entry); +#ifdef USE_ALARM_TIMEOUT  clean_up: -#ifdef USE_ALARM_TIMEOUT    if (timeout > 0) {  #ifdef HAVE_SIGACTION diff --git a/lib/transfer.c b/lib/transfer.c index 6e669abc5..ad9499c99 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -1060,21 +1060,22 @@ CURLcode Curl_readwrite(struct connectdata *conn,    if(result)      return result; -  if(data->set.timeout && -     (Curl_tvdiff(k->now, k->start) >= data->set.timeout)) { -    if(k->size != -1) { -      failf(data, "Operation timed out after %ld milliseconds with %" -            FORMAT_OFF_T " out of %" FORMAT_OFF_T " bytes received", -            Curl_tvdiff(k->now, k->start), k->bytecount, k->size); -    } else { -      failf(data, "Operation timed out after %ld milliseconds with %" -            FORMAT_OFF_T " bytes received", -            Curl_tvdiff(k->now, k->start), k->bytecount); +  if(k->keepon) { +    if(data->set.timeout && +       (Curl_tvdiff(k->now, k->start) >= data->set.timeout)) { +      if(k->size != -1) { +        failf(data, "Operation timed out after %ld milliseconds with %" +              FORMAT_OFF_T " out of %" FORMAT_OFF_T " bytes received", +              Curl_tvdiff(k->now, k->start), k->bytecount, k->size); +      } else { +        failf(data, "Operation timed out after %ld milliseconds with %" +              FORMAT_OFF_T " bytes received", +              Curl_tvdiff(k->now, k->start), k->bytecount); +      } +      return CURLE_OPERATION_TIMEDOUT;      } -    return CURLE_OPERATION_TIMEDOUT;    } - -  if(!k->keepon) { +  else {      /*       * The transfer has been performed. Just make some general checks before       * returning. diff --git a/tests/libtest/lib572.c b/tests/libtest/lib572.c index b3e48e3a4..18e74d4db 100644 --- a/tests/libtest/lib572.c +++ b/tests/libtest/lib572.c @@ -69,9 +69,7 @@ int test(char *URL)    test_setopt(curl, CURLOPT_RTSP_TRANSPORT, "Planes/Trains/Automobiles");    test_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_SETUP); -  fprintf(stderr, "CPC: %s:%d\n", __FILE__, __LINE__);    res = curl_easy_perform(curl); -  fprintf(stderr, "CPC: %s:%d\n", __FILE__, __LINE__);    if(res)      goto test_cleanup; @@ -82,7 +80,6 @@ int test(char *URL)    test_setopt(curl, CURLOPT_RTSP_STREAM_URI, stream_uri);    free(stream_uri);    stream_uri = NULL; -  fprintf(stderr, "CPC: %s:%d\n", __FILE__, __LINE__);    /* PUT style GET_PARAMETERS */    params = open("log/file572.txt", O_RDONLY); @@ -101,7 +98,6 @@ int test(char *URL)    test_setopt(curl, CURLOPT_UPLOAD, 1L);    test_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t) file_info.st_size); -  fprintf(stderr, "CPC: %s:%d\n", __FILE__, __LINE__);    res = curl_easy_perform(curl);    if(res)      goto test_cleanup; @@ -109,7 +105,6 @@ int test(char *URL)    test_setopt(curl, CURLOPT_UPLOAD, 0L);    fclose(paramsf);    paramsf = NULL; -  fprintf(stderr, "CPC: %s:%d\n", __FILE__, __LINE__);    /* Heartbeat GET_PARAMETERS */    if((stream_uri = suburl(URL, request++)) == NULL) { @@ -120,7 +115,6 @@ int test(char *URL)    free(stream_uri);    stream_uri = NULL; -  fprintf(stderr, "CPC: %s:%d\n", __FILE__, __LINE__);    res = curl_easy_perform(curl);    if(res)      goto test_cleanup; | 
