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);