aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES11
-rw-r--r--RELEASE-NOTES4
-rw-r--r--lib/hostip.c2
-rw-r--r--lib/transfer.c27
-rw-r--r--tests/libtest/lib572.c6
5 files changed, 29 insertions, 21 deletions
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;