]> granicus.if.org Git - curl/commitdiff
Added timeout support for the non-windows version.
authorDaniel Stenberg <daniel@haxx.se>
Tue, 8 Oct 2002 13:03:26 +0000 (13:03 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 8 Oct 2002 13:03:26 +0000 (13:03 +0000)
lib/telnet.c

index 55d2c9a43ec8553605cc9379922ec1c0db90cb82..0267235d80195fe7e636b1253ad550d8912dc75b 100644 (file)
@@ -1050,6 +1050,7 @@ CURLcode Curl_telnet(struct connectdata *conn)
   char *buf = data->state.buffer;
   ssize_t nread;
   struct TELNET *tn;
+  struct timeval now;           /* current time */
 
   code = init_telnet(conn);
   if(code)
@@ -1149,9 +1150,13 @@ CURLcode Curl_telnet(struct connectdata *conn)
   keepfd = readfd;
 
   while (keepon) {
+    struct timeval interval;
+
     readfd = keepfd;           /* set this every lap in the loop */
+    interval.tv_sec = 1;
+    interval.tv_usec = 0;
 
-    switch (select (sockfd + 1, &readfd, NULL, NULL, NULL)) {
+    switch (select (sockfd + 1, &readfd, NULL, NULL, &interval)) {
     case -1:                   /* error, stop reading */
       keepon = FALSE;
       continue;
@@ -1199,10 +1204,20 @@ CURLcode Curl_telnet(struct connectdata *conn)
         }
       }
     }
+    if(data->set.timeout) {
+      now = Curl_tvnow();
+      if(Curl_tvdiff(now, conn->created)/1000 >= data->set.timeout) {
+        failf(data, "Time-out");
+        code = CURLE_OPERATION_TIMEOUTED;
+        keepon = FALSE;
+      }
+    }
   }
 #endif
   /* mark this as "no further transfer wanted" */
-  return Curl_Transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
+  Curl_Transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
+
+  return code;
 }
 
 /*