]> granicus.if.org Git - curl/commitdiff
Andrés García found out that we didn't properly stop reading from a connection
authorDaniel Stenberg <daniel@haxx.se>
Wed, 23 Jan 2002 07:15:32 +0000 (07:15 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 23 Jan 2002 07:15:32 +0000 (07:15 +0000)
after the headers on a HEAD request. This bug has been added in 7.9.3 and was
mnot present earlier.

lib/transfer.c

index b57560b56f888dcd3b052556419be0a19b0691e8..f08e88c8aa9f53ae186771e3d9bc4dc4ccc10628 100644 (file)
@@ -356,10 +356,11 @@ CURLcode Curl_readwrite(struct connectdata *conn,
                * If we requested a "no body", this is a good time to get
                * out and return home.
                */
-              if(data->set.no_body)
-                return CURLE_OK;
+              bool stop_reading = FALSE;
 
-              if(!conn->bits.close) {
+              if(data->set.no_body)
+                stop_reading = TRUE;
+              else if(!conn->bits.close) {
                 /* If this is not the last request before a close, we must
                    set the maximum download size to the size of the
                    expected document or else, we won't know when to stop
@@ -370,10 +371,18 @@ CURLcode Curl_readwrite(struct connectdata *conn,
                 /* If max download size is *zero* (nothing) we already
                    have nothing and can safely return ok now! */
                 if(0 == conn->maxdownload)
-                  return CURLE_OK;
+                  stop_reading = TRUE;
                     
                 /* What to do if the size is *not* known? */
               }
+
+              if(stop_reading) {
+                /* we make sure that this socket isn't read more now */
+                k->keepon &= ~KEEP_READ;
+                FD_ZERO(&k->rkeepfd);
+                return CURLE_OK;
+              }
+
               break;           /* exit header line loop */
             }