diff --git a/daemon/src/ip_utils.cpp b/daemon/src/ip_utils.cpp index 59e5d3e12016602dddf2dfe15162b8e4debf86a6..7ed0ffa0ead3cdcdd0991e0a6d7276bc15cebfae 100644 --- a/daemon/src/ip_utils.cpp +++ b/daemon/src/ip_utils.cpp @@ -170,7 +170,10 @@ ip_utils::getInterfaceAddr(const std::string &interface, pj_uint16_t family) close(fd); sockaddr* unix_addr = &ifr.ifr_addr; - memcpy(&saddr, &ifr.ifr_addr, sizeof(pj_sockaddr)); + + memcpy(&saddr, unix_addr, unix_addr->sa_family == AF_INET6 ? + sizeof saddr.ipv6 : sizeof saddr.ipv4); + if ((ifr.ifr_addr.sa_family == AF_INET && IN_IS_ADDR_UNSPECIFIED(&((sockaddr_in *)unix_addr)->sin_addr )) || (ifr.ifr_addr.sa_family == AF_INET6 && IN6_IS_ADDR_UNSPECIFIED(&((sockaddr_in6*)unix_addr)->sin6_addr))) { return getLocalAddr(saddr.addr.sa_family);