]> sjero.net Git - wget/commitdiff
[svn] Use the new function retryable_socket_connect_error instead of the
authorhniksic <devnull@localhost>
Thu, 13 Nov 2003 22:27:38 +0000 (14:27 -0800)
committerhniksic <devnull@localhost>
Thu, 13 Nov 2003 22:27:38 +0000 (14:27 -0800)
CONNECT_ERROR macro.

src/ChangeLog
src/connect.c
src/connect.h
src/ftp.c
src/http.c
src/wget.h

index 0bd2ec89fdc70a7d466da470ed918341a3fdbed9..69eb8f3905d98d97b8e85c06bc354d78a11a7d7a 100644 (file)
@@ -1,3 +1,15 @@
+2003-11-13  Hrvoje Niksic  <hniksic@xemacs.org>
+
+       * http.c (gethttp): Ditto.
+
+       * ftp.c (getftp): Use retryable_socket_connect_error instead of
+       CONNECT_ERROR.
+
+       * wget.h (CONNECT_ERROR): Removed.
+
+       * connect.c (retryable_socket_connect_error): New function instead
+       of unsupported_socket_family_error.
+
 2003-11-13  Hrvoje Niksic  <hniksic@xemacs.org>
 
        * wget.h (CONNECT_ERROR): Use it.
index f73c9501cc9d5514584649e5f6f1e5e17a514a8d..f69b3a697268ad06e9bc611bc1bddb152cd99773 100644 (file)
@@ -574,34 +574,43 @@ socket_ip_address (int sock, ip_address *ip, int endpoint)
   return 0;
 }
 
-/* Return non-zero of the errno code passed to the function is a
-   result of an attempt to create a socket of unsupported family.  */
+/* Return non-zero if the error from the connect code can be
+   considered retryable.  Wget normally retries after errors, but the
+   exception are the "unsupported protocol" type errors (possible on
+   IPv4/IPv6 dual family systems) and "connection refused".  */
 
 int
-unsupported_socket_family_error (int err)
+retryable_socket_connect_error (int err)
 {
   /* Have to guard against some of these values not being defined.
-     Cannot use switch because some of the values might be equal.  */
+     Cannot use a switch statement because some of the values might be
+     equal.  */
+  if (0
 #ifdef EAFNOSUPPORT
-  if (err == EAFNOSUPPORT) return 1;
+      || err == EAFNOSUPPORT
 #endif
 #ifdef EPFNOSUPPORT
-  if (err == EPFNOSUPPORT) return 1;
+      || err == EPFNOSUPPORT
 #endif
 #ifdef ESOCKTNOSUPPORT         /* no, "sockt" is not a typo! */
-  if (err == ESOCKTNOSUPPORT) return 1;
+      || err == ESOCKTNOSUPPORT
 #endif
 #ifdef EPROTONOSUPPORT
-  if (err == EPROTONOSUPPORT) return 1;
+      || err == EPROTONOSUPPORT
 #endif
 #ifdef ENOPROTOOPT
-  if (err == ENOPROTOOPT) return 1;
+      || err == ENOPROTOOPT
 #endif
-  /* Apparently, older versions of Linux used EINVAL instead of
-     EAFNOSUPPORT. */
-  if (err == EINVAL) return 1;
+      /* Apparently, older versions of Linux and BSD used EINVAL
+        instead of EAFNOSUPPORT and such.  */
+      || err == EINVAL
+      )
+    return 0;
 
-  return 0;
+  if (err == ECONNREFUSED && !opt.retry_connrefused)
+    return 0;
+
+  return 1;
 }
 
 #ifdef HAVE_SELECT
index 8872ee7816e057ff2c7a2bc4b7804e2e12e175a1..7de02ce3e659173cdee25080375f4d44f0b73829 100644 (file)
@@ -56,7 +56,7 @@ enum {
 };
 int socket_ip_address PARAMS ((int, ip_address *, int));
 
-int unsupported_socket_family_error PARAMS ((int));
+int retryable_socket_connect_error PARAMS ((int));
 
 /* Flags for select_fd's WAIT_FOR argument. */
 enum {
index 21b023c2e8e66c6f979517845630aa62de799063..8159a2d9ac3ee280c38ae9cafdadc615ee09e31f 100644 (file)
--- a/src/ftp.c
+++ b/src/ftp.c
@@ -291,7 +291,8 @@ getftp (struct url *u, long *len, long restval, ccon *con)
       if (csock == E_HOST)
        return HOSTERR;
       else if (csock < 0)
-       return CONNECT_ERROR (errno);
+       return (retryable_socket_connect_error (errno)
+               ? CONERROR : CONIMPOSSIBLE);
 
       if (cmd & LEAVE_PENDING)
        rbuf_initialize (&con->rbuf, csock);
@@ -693,7 +694,8 @@ Error in server response, closing control connection.\n"));
                  logprintf (LOG_VERBOSE, _("couldn't connect to %s port %hu: %s\n"),
                             pretty_print_address (&passive_addr), passive_port,
                             strerror (save_errno));
-                 return CONNECT_ERROR (save_errno);
+                 return (retryable_socket_connect_error (save_errno)
+                         ? CONERROR : CONIMPOSSIBLE);
                }
 
              pasv_mode_open = 1;  /* Flag to avoid accept port */
index ee8d4defc25dbc864c3de48b5b0e62b9e6047fd5..f25a678276c239a2fe871afb8ebc802870d00f63 100644 (file)
@@ -704,7 +704,8 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy)
       if (sock == E_HOST)
        return HOSTERR;
       else if (sock < 0)
-       return CONNECT_ERROR (errno);
+       return (retryable_socket_connect_error (errno)
+               ? CONERROR : CONIMPOSSIBLE);
 
 #ifdef HAVE_SSL
      if (conn->scheme == SCHEME_HTTPS)
index edc159900a63fd04dabfa07d3acc087acc2fe549..e582e0082bfbae696db45119447606aa91c3f1af 100644 (file)
@@ -223,15 +223,4 @@ typedef enum
   SSLERRCERTFILE,SSLERRCERTKEY,SSLERRCTXCREATE
 } uerr_t;
 
-/* Whether the connection was unsuccessful or impossible.  If the
-   connection is considered impossible (e.g. for unsupported socket
-   family errors), there is no sense in retrying.  "Connection
-   refused" is normally not retried, except when opt.retry_connrefused
-   is specified.  */
-
-#define CONNECT_ERROR(err) ((unsupported_socket_family_error (err)     \
-                            || ((err) == ECONNREFUSED                  \
-                                && !opt.retry_connrefused))            \
-                           ? CONIMPOSSIBLE : CONERROR)
-
 #endif /* WGET_H */