Commit 05632d5d authored by Bob Richmond's avatar Bob Richmond Committed by Daniel Stenberg
Browse files

fix: timeout after last data chunk was handled

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.
parent c245a8f9
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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.
+3 −1
Original line number Diff line number Diff line
@@ -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)
+14 −13
Original line number Diff line number Diff line
@@ -1060,6 +1060,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
  if(result)
    return result;

  if(k->keepon) {
    if(data->set.timeout &&
       (Curl_tvdiff(k->now, k->start) >= data->set.timeout)) {
      if(k->size != -1) {
@@ -1073,8 +1074,8 @@ CURLcode Curl_readwrite(struct connectdata *conn,
      }
      return CURLE_OPERATION_TIMEDOUT;
    }

  if(!k->keepon) {
  }
  else {
    /*
     * The transfer has been performed. Just make some general checks before
     * returning.