#ifndef NO_IPV6
hints.ai_flags = AI_CANONNAME;
- hints.ai_family = address_family;
- hints.ai_socktype = 0;
+ hints.ai_family = (address_family == ADDRTYPE_IPV4 ? AF_INET :
+ address_family == ADDRTYPE_IPV6 ? AF_INET6 :
+ AF_UNSPEC);
+ hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = 0;
hints.ai_addrlen = 0;
hints.ai_addr = NULL;
hints.ai_canonname = NULL;
hints.ai_next = NULL;
- err = getaddrinfo(host, NULL, NULL, &ret->ai);
+ err = getaddrinfo(host, NULL, &hints, &ret->ai);
if (err != 0) {
ret->error = gai_strerror(err);
return ret;
else
strncat(realhost, host, sizeof(realhost) - 1);
#else
- if ((a = inet_addr(host)) == (unsigned long) INADDR_NONE) {
+ if ((a = inet_addr(host)) == (unsigned long)(in_addr_t)(-1)) {
/*
* Otherwise use the IPv4-only gethostbyname... (NOTE:
* we don't use gethostbyname as a fallback!)
ret->family = AF_UNSPEC;
strncpy(ret->hostname, host, lenof(ret->hostname));
ret->hostname[lenof(ret->hostname)-1] = '\0';
+#ifndef NO_IPV6
+ ret->ai = NULL;
+#endif
return ret;
}
*/
if (srcaddr) {
a.sin_addr.s_addr = inet_addr(srcaddr);
- if (a.sin_addr.s_addr != INADDR_NONE) {
+ if (a.sin_addr.s_addr != (in_addr_t)(-1)) {
/* Override localhost_only with specified listen addr. */
ret->localhost_only = ipv4_is_loopback(a.sin_addr);
got_addr = 1;