From 9adc7cf27588845988dc269bf234f7cec70b48cb Mon Sep 17 00:00:00 2001
From: hniksic <devnull@localhost>
Date: Fri, 6 Feb 2004 08:59:54 -0800
Subject: [PATCH] [svn] Zero out sockaddr_in/sockaddr_in6.  Apparently
 BSD-derived stacks need this when binding a socket to local address.

---
 src/ChangeLog | 6 ++++++
 src/connect.c | 2 ++
 2 files changed, 8 insertions(+)

diff --git a/src/ChangeLog b/src/ChangeLog
index 993f05bf..d40523b9 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2004-02-06  Hrvoje Niksic  <hniksic@xemacs.org>
+
+	* connect.c (sockaddr_set_data): Zero out
+	sockaddr_in/sockaddr_in6.  Apparently BSD-derived stacks need this
+	when binding a socket to local address.
+
 2004-02-04  Hrvoje Niksic  <hniksic@xemacs.org>
 
 	* hash.c: Make the file compilable outside Wget source tree when
diff --git a/src/connect.c b/src/connect.c
index fd3bbb92..ffa33cc0 100644
--- a/src/connect.c
+++ b/src/connect.c
@@ -87,6 +87,7 @@ sockaddr_set_data (struct sockaddr *sa, const ip_address *ip, int port)
     case IPV4_ADDRESS:
       {
 	struct sockaddr_in *sin = (struct sockaddr_in *)sa;
+	xzero (*sin);
 	sin->sin_family = AF_INET;
 	sin->sin_port = htons (port);
 	sin->sin_addr = ADDRESS_IPV4_IN_ADDR (ip);
@@ -96,6 +97,7 @@ sockaddr_set_data (struct sockaddr *sa, const ip_address *ip, int port)
     case IPV6_ADDRESS:
       {
 	struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sa;
+	xzero (*sin6);
 	sin6->sin6_family = AF_INET6;
 	sin6->sin6_port = htons (port);
 	sin6->sin6_addr = ADDRESS_IPV6_IN6_ADDR (ip);