set the 'retry' bit to TRUE when the connection is about to be retried,
authorDaniel Stenberg <daniel@haxx.se>
Mon, 2 Feb 2004 14:49:54 +0000 (14:49 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 2 Feb 2004 14:49:54 +0000 (14:49 +0000)
this allows the HTTP code to *not* return a failure just because no data
has been received from the server

lib/http.c
lib/if2ip.c
lib/transfer.c
lib/urldata.h

index fea11f5..3bab60d 100644 (file)
@@ -1028,9 +1028,11 @@ CURLcode Curl_http_done(struct connectdata *conn)
   else if(HTTPREQ_PUT == data->set.httpreq)
     conn->bytecount = http->readbytecount + http->writebytecount;
 
-  if(0 == (http->readbytecount + conn->headerbytecount)) {
-    /* nothing was read from the HTTP server, this can't be right
-       so we return an error here */
+  if(!conn->bits.retry &&
+     !(http->readbytecount + conn->headerbytecount)) {
+    /* If this connection isn't simply closed to be retried, AND nothing was
+       read from the HTTP server, this can't be right so we return an error
+       here */
     failf(data, "Empty reply from server");
     return CURLE_GOT_NOTHING;
   }
index 0dd403a..299be75 100644 (file)
@@ -51,7 +51,9 @@
 #ifdef HAVE_NET_IF_H
 #include <net/if.h>
 #endif
+#ifdef HAVE_SYS_IOCTL_H
 #include <sys/ioctl.h>
+#endif
 
 /* -- if2ip() -- */
 #ifdef HAVE_NETDB_H
index ac23b11..707895f 100644 (file)
@@ -29,7 +29,9 @@
 #include <stdarg.h>
 #include <stdlib.h>
 #include <ctype.h>
+#ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
+#endif
 #include <sys/stat.h>
 
 #include <errno.h>
@@ -44,7 +46,9 @@
 #ifdef HAVE_SYS_SOCKET_H
 #include <sys/socket.h>
 #endif
+#ifdef HAVE_NETINET_IN_H
 #include <netinet/in.h>
+#endif
 #include <sys/time.h>
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
@@ -56,7 +60,9 @@
 #ifdef HAVE_NET_IF_H
 #include <net/if.h>
 #endif
+#ifdef HAVE_SYS_IOCTL_H
 #include <sys/ioctl.h>
+#endif
 #include <signal.h>
 
 #ifdef HAVE_SYS_PARAM_H
@@ -1910,6 +1916,11 @@ CURLcode Curl_perform(struct SessionHandle *data)
             newurl = strdup(conn->data->change.url);
 
             conn->bits.close = TRUE; /* close this connection */
+            conn->bits.retry = TRUE; /* mark this as a connection we're about
+                                        to retry. Marking it this way should
+                                        prevent i.e HTTP transfers to return
+                                        error just because nothing has been
+                                        transfered! */
           }
           else
             /*
index 49a38df..9b81e69 100644 (file)
@@ -296,6 +296,8 @@ struct ConnectBits {
   bool tcpconnect;    /* the tcp stream (or simimlar) is connected, this
                          is set the first time on the first connect function
                          call */
+  bool retry;         /* this connection is about to get closed and then
+                         re-attempted at another connection. */
 };
 
 /*