From c64fca1b0cd360cca39b960864ed6f591dbc16ec Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Sat, 27 Apr 2002 13:24:06 +0000 Subject: [PATCH] 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... --- lib/ftp.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/ftp.c b/lib/ftp.c index 47bdcb751..ff43c0b4d 100644 --- a/lib/ftp.c +++ b/lib/ftp.c @@ -210,16 +210,6 @@ int Curl_GetFTPResponse(char *buf, if (ftpcode) *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_SET (sockfd, &readfd); /* read socket */ @@ -235,6 +225,17 @@ int Curl_GetFTPResponse(char *buf, keepon=TRUE; while((nreadset.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) { readfd = rkeepfd; /* set every lap */ interval.tv_sec = timeout;