lib: add sockopt helper for setting IPV6_V6ONLY and use it
getaddrinfo returns a list of socket parameters for listening. it
will contain both IPv4 and IPv6 listening sockets. unless we use
IPV6_V6ONLY on the IPv6 ones, only the socket listed first will
work. if the IPv4 one came first, the IPv6 one would get an
"Address in use" error.
this functionality was already present for bgpd and its listening
sockets. as it is needed for vtys as well, make it a common helper.
diff --git a/bgpd/bgp_network.c b/bgpd/bgp_network.c
index bd2e2d6..b5c4c60 100644
--- a/bgpd/bgp_network.c
+++ b/bgpd/bgp_network.c
@@ -387,14 +387,7 @@
# endif
#endif
-#ifdef IPV6_V6ONLY
- /* Want only IPV6 on ipv6 socket (not mapped addresses) */
- if (sa->sa_family == AF_INET6) {
- int on = 1;
- setsockopt (sock, IPPROTO_IPV6, IPV6_V6ONLY,
- (void *) &on, sizeof (on));
- }
-#endif
+ sockopt_v6only (sa->sa_family, sock);
ret = bind (sock, sa, salen);
en = errno;