From a14aaaf23fa8202fe60f5d7ba29dfe842ab5f80d Mon Sep 17 00:00:00 2001
From: Daniel Stenberg <daniel@haxx.se>
Date: Wed, 31 Jan 2001 15:05:44 +0000
Subject: [PATCH] fixed up the telnet to work (using support from Linus
 Nielsen)

---
 lib/telnet.c   | 20 +++++++++++---------
 lib/transfer.c |  6 ++++++
 2 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/lib/telnet.c b/lib/telnet.c
index 201bd6b50d..cda76d4469 100644
--- a/lib/telnet.c
+++ b/lib/telnet.c
@@ -872,20 +872,22 @@ CURLcode Curl_telnet(struct connectdata *conn)
         }
       }
 
-      if(FD_ISSET(sockfd, &readfd))
+      if(FD_ISSET(sockfd, &readfd)) {
         Curl_read(conn, sockfd, buf, BUFSIZE - 1, &nread);
 
-      /* if we receive 0 or less here, the server closed the connection and
-         we bail out from this! */
-      if (nread <= 0) {
-        keepon = FALSE;
-        break;
-      }
+        /* if we receive 0 or less here, the server closed the connection and
+           we bail out from this! */
+        if (nread <= 0) {
+          keepon = FALSE;
+          break;
+        }
 
-      telrcv(data, (unsigned char *)buf, nread);
+        telrcv(data, (unsigned char *)buf, nread);
+      }
     }
   }
-  return CURLE_OK;
+  /* mark this as "no further transfer wanted" */
+  return Curl_Transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
 }
 
 
diff --git a/lib/transfer.c b/lib/transfer.c
index 09c1262cb9..92b56600ce 100644
--- a/lib/transfer.c
+++ b/lib/transfer.c
@@ -161,6 +161,12 @@ _Transfer(struct connectdata *c_conn)
   Curl_pgrsTime(data, TIMER_PRETRANSFER);
   Curl_speedinit(data);
 
+  if((conn->sockfd == -1) &&
+     (conn->writesockfd == -1)) {
+    /* nothing to read, nothing to write, we're already OK! */
+    return CURLE_OK;
+  }
+
   if (!conn->getheader) {
     header = FALSE;
     if(conn->size > 0)
-- 
GitLab