mirror of
https://github.com/moparisthebest/curl
synced 2024-12-22 08:08:50 -05:00
Fixed the FTP response reader to deal with timeouts better. Previously it
would reset the timeout for each incoming data, which would make veeery slow responses be allowed to take even more time since the timeout would only be reached if the time between two received data chunks was longer than the set timeout value...
This commit is contained in:
parent
15b2a3af91
commit
c64fca1b0c
21
lib/ftp.c
21
lib/ftp.c
@ -210,16 +210,6 @@ int Curl_GetFTPResponse(char *buf,
|
|||||||
if (ftpcode)
|
if (ftpcode)
|
||||||
*ftpcode = 0; /* 0 for errors */
|
*ftpcode = 0; /* 0 for errors */
|
||||||
|
|
||||||
if(data->set.timeout) {
|
|
||||||
/* if timeout is requested, find out how much remaining time we have */
|
|
||||||
timeout = data->set.timeout - /* timeout time */
|
|
||||||
Curl_tvdiff(Curl_tvnow(), conn->now)/1000; /* spent time */
|
|
||||||
if(timeout <=0 ) {
|
|
||||||
failf(data, "Transfer aborted due to timeout");
|
|
||||||
return -SELECT_TIMEOUT; /* already too little time */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FD_ZERO (&readfd); /* clear it */
|
FD_ZERO (&readfd); /* clear it */
|
||||||
FD_SET (sockfd, &readfd); /* read socket */
|
FD_SET (sockfd, &readfd); /* read socket */
|
||||||
|
|
||||||
@ -235,6 +225,17 @@ int Curl_GetFTPResponse(char *buf,
|
|||||||
keepon=TRUE;
|
keepon=TRUE;
|
||||||
|
|
||||||
while((nread<BUFSIZE) && (keepon && !error)) {
|
while((nread<BUFSIZE) && (keepon && !error)) {
|
||||||
|
/* check and reset timeout value every lap */
|
||||||
|
if(data->set.timeout) {
|
||||||
|
/* if timeout is requested, find out how much remaining time we have */
|
||||||
|
timeout = data->set.timeout - /* timeout time */
|
||||||
|
Curl_tvdiff(Curl_tvnow(), conn->now)/1000; /* spent time */
|
||||||
|
if(timeout <=0 ) {
|
||||||
|
failf(data, "Transfer aborted due to timeout");
|
||||||
|
return -SELECT_TIMEOUT; /* already too little time */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(!ftp->cache) {
|
if(!ftp->cache) {
|
||||||
readfd = rkeepfd; /* set every lap */
|
readfd = rkeepfd; /* set every lap */
|
||||||
interval.tv_sec = timeout;
|
interval.tv_sec = timeout;
|
||||||
|
Loading…
Reference in New Issue
Block a user