X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fnetutils.c;h=180d32eed7f6b510880a9a6b1fe4c75351536d74;hb=870f342f5de7311f7895f2ca96a8bdd7df20e046;hp=5399fb07f56520e7b3001176770666b60526ca36;hpb=ba0970e1c7736ca136e7bf070f6ee1270af891a0;p=deb_shairplay.git diff --git a/src/lib/netutils.c b/src/lib/netutils.c index 5399fb0..180d32e 100644 --- a/src/lib/netutils.c +++ b/src/lib/netutils.c @@ -71,12 +71,17 @@ netutils_init_socket(unsigned short *port, int use_ipv6, int use_udp) memset(&saddr, 0, sizeof(saddr)); if (use_ipv6) { struct sockaddr_in6 *sin6ptr = (struct sockaddr_in6 *)&saddr; + int v6only = 1; /* Initialize sockaddr for bind */ sin6ptr->sin6_family = family; sin6ptr->sin6_addr = in6addr_any; sin6ptr->sin6_port = htons(*port); + /* Make sure we only listen to IPv6 addresses */ + setsockopt(server_fd, IPPROTO_IPV6, IPV6_V6ONLY, + (char *) &v6only, sizeof(v6only)); + socklen = sizeof(*sin6ptr); ret = bind(server_fd, (struct sockaddr *)sin6ptr, socklen); if (ret == -1) { @@ -178,7 +183,7 @@ netutils_parse_address(int family, const char *src, void *dst, int dstlen) length = -1; for (ptr=result; ptr!=NULL; ptr=ptr->ai_next) { - if (family == ptr->ai_family && dstlen >= ptr->ai_addrlen) { + if (family == ptr->ai_family && (unsigned int)dstlen >= ptr->ai_addrlen) { memcpy(dst, ptr->ai_addr, ptr->ai_addrlen); length = ptr->ai_addrlen; break;