summaryrefslogtreecommitdiff
path: root/ftp/wget-devel/files/patch-ai
blob: 3b9a58c6be5cb232ec3d8128eed6ab1ed4f7798d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
--- src/connect.c.orig	Sun Mar 29 23:28:15 1998
+++ src/connect.c	Fri Sep 24 15:49:42 1999
@@ -62,6 +62,59 @@
 uerr_t
 make_connection (int *sock, char *hostname, unsigned short port)
 {
+#ifdef INET6
+  struct sockaddr_storage sock_name;
+  struct sockaddr_in *sin;
+  struct sockaddr_in6 *sin6;
+  size_t socksize;
+
+  /*
+   * Get internet address of the host.  We can do it either by calling
+   * ngethostbyname, or by calling store_hostaddress, from host.c.
+   * storehostaddress is better since it caches calls to
+   * gethostbyname.
+   */
+  if (!store_hostaddress (&sock_name, hostname))
+    return HOSTERR;
+
+  /* Set port and protocol */
+  switch (sock_name.ss_family) {
+  case AF_INET:
+      sin = (struct sockaddr_in *) &sock_name;
+      sin->sin_family = AF_INET;
+#ifdef HAVE_SOCKADDR_SA_LEN
+      sin->sin_len = sizeof (struct sockaddr_in);
+#endif
+      sin->sin_port = htons (port);
+      socksize = sizeof (struct sockaddr_in);
+      break;
+  case AF_INET6:
+      sin6 = (struct sockaddr_in6 *) &sock_name;
+      sin6->sin6_family = AF_INET6;
+#ifdef HAVE_SOCKADDR_SA_LEN
+      sin6->sin6_len = sizeof (struct sockaddr_in6);
+#endif
+      sin6->sin6_port = htons (port);
+      socksize = sizeof (struct sockaddr_in6);
+      break;
+  default:
+      return HOSTERR;
+  }
+  /* Make an internet socket, stream type.  */
+  if ((*sock = socket (sock_name.ss_family, SOCK_STREAM, 0)) == -1)
+      return CONSOCKERR;
+
+  /* Connect the socket to the remote host.  */
+  if (connect (*sock, (struct sockaddr *) &sock_name, socksize))
+    {
+      if (errno == ECONNREFUSED)
+	return CONREFUSED;
+      else
+	return CONERROR;
+    }
+  DEBUGP (("Created fd %d.\n", *sock));
+  return NOCONERROR;
+#else  /* !INET6 */
   struct sockaddr_in sock_name;
   /* struct hostent *hptr; */
 
@@ -97,6 +150,7 @@
     }
   DEBUGP (("Created fd %d.\n", *sock));
   return NOCONERROR;
+#endif /* INET6 */
 }
 
 /* Bind the local port PORT.  This does all the necessary work, which