From f5fe8fb6e9a41432b501a1485cc66a60de305aef Mon Sep 17 00:00:00 2001 From: david Date: Tue, 28 Jun 2011 00:35:01 +0000 Subject: [PATCH] Use the proper length in get_srcaddr, not sizeof(sockaddr_in6). This was a bug in r24413. The size needs to vary with the address family on some platforms including OS X. This was noticed by Chris Clements. --- libnetutil/netutil.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libnetutil/netutil.cc b/libnetutil/netutil.cc index 2b3815722..ded755004 100644 --- a/libnetutil/netutil.cc +++ b/libnetutil/netutil.cc @@ -3044,6 +3044,7 @@ static int get_srcaddr(const struct sockaddr_storage *dst, { static const unsigned short DUMMY_PORT = 1234; struct sockaddr_storage dst_dummy; + size_t dst_dummy_len; socklen_t len; int fd, rc; @@ -3055,14 +3056,16 @@ static int get_srcaddr(const struct sockaddr_storage *dst, if (dst_dummy.ss_family == AF_INET) { struct sockaddr_in *sin = (struct sockaddr_in *) &dst_dummy; sin->sin_port = htons(DUMMY_PORT); + dst_dummy_len = sizeof(*sin); } else if (dst_dummy.ss_family == AF_INET6) { struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) &dst_dummy; sin6->sin6_port = htons(DUMMY_PORT); + dst_dummy_len = sizeof(*sin6); } else { return -1; } - rc = connect(fd, (struct sockaddr *) &dst_dummy, sizeof(struct sockaddr_in6)); + rc = connect(fd, (struct sockaddr *) &dst_dummy, dst_dummy_len); if (rc == -1) netutil_fatal("%s: can't connect socket: %s", __func__, socket_strerror(socket_errno()));