diff --git a/src/api/netdb.c b/src/api/netdb.c index dee38e1a..3c2c9eb0 100644 --- a/src/api/netdb.c +++ b/src/api/netdb.c @@ -265,7 +265,7 @@ lwip_getaddrinfo(const char *nodename, const char *servname, err_t err; ip_addr_t addr; struct addrinfo *ai; - struct sockaddr_in *sa = NULL; + struct sockaddr_storage *sa = NULL; int port_nr = 0; size_t total_size; size_t namelen = 0; @@ -318,9 +318,10 @@ lwip_getaddrinfo(const char *nodename, const char *servname, return EAI_MEMORY; } memset(ai, 0, total_size); + sa = (struct sockaddr_storage *)(void*)((u8_t*)ai + sizeof(struct addrinfo)); if (IP_IS_V6(addr)) { #if LWIP_IPV6 - struct sockaddr_in6 *sa6 = (struct sockaddr_in6*)((u8_t*)ai + sizeof(struct addrinfo)); + struct sockaddr_in6 *sa6 = (struct sockaddr_in6*)sa; /* set up sockaddr */ inet6_addr_from_ip6addr(&sa6->sin6_addr, ip_2_ip6(&addr)); sa->sin_family = AF_INET6; @@ -329,12 +330,12 @@ lwip_getaddrinfo(const char *nodename, const char *servname, #endif /* LWIP_IPV6 */ } else { #if LWIP_IPV4 - struct sockaddr_in *sa = (struct sockaddr_in*)((u8_t*)ai + sizeof(struct addrinfo)); + struct sockaddr_in *sa4 = (struct sockaddr_in*)sa; /* set up sockaddr */ - inet_addr_from_ipaddr(&sa->sin_addr, ip_2_ip4(&addr)); - sa->sin_family = AF_INET; - sa->sin_len = sizeof(struct sockaddr_in); - sa->sin_port = htons((u16_t)port_nr); + inet_addr_from_ipaddr(&sa4->sin_addr, ip_2_ip4(&addr)); + sa4->sin_family = AF_INET; + sa4->sin_len = sizeof(struct sockaddr_in); + sa4->sin_port = htons((u16_t)port_nr); #endif /* LWIP_IPV4 */ }