$NetBSD: patch-aa,v 1.7 2005/01/25 20:07:25 bouyer Exp $

--- src/connect.c.orig	Sat Nov  1 15:08:22 2003
+++ src/connect.c	Sun Jan 23 22:11:24 2005
@@ -155,11 +155,11 @@
   int sock, save_errno;
 
   /* Set port and protocol */
-  wget_sockaddr_set_address (&sa, ip_default_family, port, addr);
+  wget_sockaddr_set_address (&sa, port, addr, addr->family);
 
   if (!silent)
     {
-      char *pretty_addr = pretty_print_address (addr);
+      char *pretty_addr = pretty_print_address (addr->bytes);
       if (connection_host_name
 	  && 0 != strcmp (connection_host_name, pretty_addr))
 	logprintf (LOG_VERBOSE, _("Connecting to %s[%s]:%hu... "),
@@ -170,7 +170,7 @@
     }
 
   /* Make an internet socket, stream type.  */
-  sock = socket (ip_default_family, SOCK_STREAM, 0);
+  sock = socket (addr->family, SOCK_STREAM, 0);
   if (sock < 0)
     goto out;
 
@@ -196,8 +196,8 @@
     {
       /* Bind the client side to the requested address. */
       wget_sockaddr bsa;
-      wget_sockaddr_set_address (&bsa, ip_default_family, 0, &bind_address);
-      if (bind (sock, &bsa.sa, sockaddr_len ()))
+      wget_sockaddr_set_address (&bsa, 0, &bind_address, bind_address.family);
+      if (bind (sock, &bsa.sa, sockaddr_len (bind_address.family)))
 	{
 	  CLOSE (sock);
 	  sock = -1;
@@ -206,7 +206,7 @@
     }
 
   /* Connect the socket to the remote host.  */
-  if (connect_with_timeout (sock, &sa.sa, sockaddr_len (),
+  if (connect_with_timeout (sock, &sa.sa, sockaddr_len (addr->family),
 			    opt.connect_timeout) < 0)
     {
       CLOSE (sock);
@@ -248,8 +248,11 @@
 
       sock = connect_to_one (&addr, port, silent);
       if (sock >= 0)
-	/* Success. */
-	return sock;
+        {
+	  /* Success. */
+          ip_default_family = addr.family;
+	  return sock;
+        }
 
       address_list_set_faulty (al, i);
 
@@ -316,9 +319,10 @@
 #endif
 
   resolve_bind_address ();
-  wget_sockaddr_set_address (&srv, ip_default_family, htons (*port),
-			     bind_address_resolved ? &bind_address : NULL);
-  if (bind (msock, &srv.sa, sockaddr_len ()) < 0)
+  wget_sockaddr_set_address (&srv, htons (*port),
+			     bind_address_resolved ? &bind_address : NULL,
+                             family);
+  if (bind (msock, &srv.sa, sockaddr_len (family)) < 0)
     {
       CLOSE (msock);
       msock = -1;
@@ -327,7 +331,7 @@
   DEBUGP (("Master socket fd %d bound.\n", msock));
   if (!*port)
     {
-      socklen_t sa_len = sockaddr_len ();
+      socklen_t sa_len = sockaddr_len (family);
       if (getsockname (msock, &srv.sa, &sa_len) < 0)
 	{
 	  CLOSE (msock);
@@ -389,7 +393,7 @@
 uerr_t
 acceptport (int *sock)
 {
-  socklen_t addrlen = sockaddr_len ();
+  socklen_t addrlen = sockaddr_len (ip_default_family);
 
 #ifdef HAVE_SELECT
   if (opt.connect_timeout)
@@ -429,11 +433,13 @@
     {
 #ifdef ENABLE_IPV6
     case AF_INET6:
-      memcpy (ip, &mysrv.sin6.sin6_addr, 16);
+      memcpy (ip->bytes, &mysrv.sin6.sin6_addr, 16);
+      ip->family = AF_INET6;
       return 1;
 #endif
     case AF_INET:
-      map_ipv4_to_ip ((ip4_address *)&mysrv.sin.sin_addr, ip);
+      memcpy (ip->bytes, &mysrv.sin.sin_addr, 4);
+      ip->family = AF_INET;
       return 1;
     default:
       abort ();