diff --git a/CHANGES b/CHANGES index b6a5d4227..fa3f4000a 100644 --- a/CHANGES +++ b/CHANGES @@ -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;