提交 9b2cce23 编写于 作者: D Daniel Stenberg

- Based on patch provided by Jacob Moshenko, the transfer logic now properly

  makes sure that when using sub-second timeouts, there's no final bad 1000ms
  wait. Previously, a sub-second timeout would often make the elapsed time end
  up the time rounded up to the nearest second (e.g. 1s for 200ms timeout)
上级 cd465e4a
......@@ -7,6 +7,11 @@
Changelog
Daniel Stenberg (2 Mar 2010)
- Based on patch provided by Jacob Moshenko, the transfer logic now properly
makes sure that when using sub-second timeouts, there's no final bad 1000ms
wait. Previously, a sub-second timeout would often make the elapsed time end
up the time rounded up to the nearest second (e.g. 1s for 200ms timeout)
- Andrei Benea filed bug report #2956698 and pointed out that the
CURLOPT_CERTINFO feature leaked memory due to a missing OpenSSL function
call. He provided the patch to fix it too.
......
......@@ -26,6 +26,7 @@ This release includes the following bugfixes:
o FTP timeouts after file transferred completely
o skip poll() on Interix
o CURLOPT_CERTINFO memory leak
o sub-second timeouts improvements
This release includes the following known bugs:
......@@ -36,6 +37,6 @@ advice from friends like these:
Steven M. Schweda, Yang Tse, Jack Zhang, Tom Donovan, Martin Hager,
Daniel Fandrich, Patrick Monnerat, Pat Ray, Wesley Miaw, Ben Greear,
Ryan Chan, Markus Duft, Andrei Benea
Ryan Chan, Markus Duft, Andrei Benea, Jacob Moshenko
Thanks! (and sorry if I forgot to mention someone)
......@@ -1067,11 +1067,11 @@ CURLcode Curl_readwrite(struct connectdata *conn,
if(k->size != -1) {
failf(data, "Operation timed out after %ld milliseconds with %"
FORMAT_OFF_T " out of %" FORMAT_OFF_T " bytes received",
data->set.timeout, k->bytecount, k->size);
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",
data->set.timeout, k->bytecount);
Curl_tvdiff(k->now, k->start), k->bytecount);
}
return CURLE_OPERATION_TIMEDOUT;
}
......@@ -1266,8 +1266,17 @@ Transfer(struct connectdata *conn)
/* if this is the first lap and one of the file descriptors is fine
to work with, skip the timeout */
timeout_ms = 0;
else
timeout_ms = 1000;
else {
if(data->set.timeout) {
timeout_ms = data->set.timeout - Curl_tvdiff(k->now, k->start);
if(timeout_ms > 1000)
timeout_ms = 1000;
else if(timeout_ms < 0)
return CURLE_OPERATION_TIMEDOUT;
}
else
timeout_ms = 1000;
}
switch (Curl_socket_ready(fd_read, fd_write, timeout_ms)) {
case -1: /* select() error, stop reading */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册