Fixed the FTP response reader to deal with timeouts better. Previously it
authorDaniel Stenberg <daniel@haxx.se>
Sat, 27 Apr 2002 13:24:06 +0000 (13:24 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Sat, 27 Apr 2002 13:24:06 +0000 (13:24 +0000)
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

index 47bdcb751a2981bfcce94d20a1a3faf986bf7ee9..ff43c0b4d04f6635789b8397de63518bf70cfe7f 100644 (file)
--- 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((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) {
       readfd = rkeepfd;                   /* set every lap */
       interval.tv_sec = timeout;