From e38166cc1b7422a2cbf2bab59f13a7b44a7fec74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rio=20Ka=C5=A1uba?= Date: Sat, 19 Mar 2016 14:37:10 +0100 Subject: [PATCH 1/2] Use sockaddr_storage instead of sockaddr to support IPv6 addresses --- src/select.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/select.cpp b/src/select.cpp index 5312d329..3da6fb7e 100644 --- a/src/select.cpp +++ b/src/select.cpp @@ -435,14 +435,15 @@ bool zmq::select_t::is_retired_fd (const fd_entry_t &entry) #if defined ZMQ_HAVE_WINDOWS u_short zmq::select_t::get_fd_family (fd_t fd_) { - sockaddr addr = { 0 }; - int addr_size = sizeof addr; - int rc = getsockname (fd_, &addr, &addr_size); + sockaddr_storage addr = { 0 }; + int addr_size = sizeof addr; + + int rc = getsockname (fd_, (sockaddr *)&addr, &addr_size); // AF_INET and AF_INET6 can be mixed in select // TODO: If proven otherwise, should simply return addr.sa_family if (rc != SOCKET_ERROR) - return addr.sa_family == AF_INET6 ? AF_INET : addr.sa_family; + return addr.ss_family == AF_INET6 ? AF_INET : addr.ss_family; else return AF_UNSPEC; } From 75579fe7d961f506896b3e7a6443bff4da3cfebe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rio=20Ka=C5=A1uba?= Date: Sat, 19 Mar 2016 14:49:22 +0100 Subject: [PATCH 2/2] Added comment to sockaddr_storage --- src/select.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/select.cpp b/src/select.cpp index 3da6fb7e..7a80067d 100644 --- a/src/select.cpp +++ b/src/select.cpp @@ -435,6 +435,7 @@ bool zmq::select_t::is_retired_fd (const fd_entry_t &entry) #if defined ZMQ_HAVE_WINDOWS u_short zmq::select_t::get_fd_family (fd_t fd_) { + // Use sockaddr_storage instead of sockaddr to accomodate differect structure sizes sockaddr_storage addr = { 0 }; int addr_size = sizeof addr;