MINOR: tcp: don't try to set/clear v6only on inherited sockets
If a socket was already bound (inherited from a parent or retrieved from
a previous process), there's no point trying to change its IPV6_V6ONLY
state since it will fail. This is visible in strace as an EINVAL during
a reload when passing FDs.
diff --git a/src/proto_tcp.c b/src/proto_tcp.c
index 091772d..eb0e668 100644
--- a/src/proto_tcp.c
+++ b/src/proto_tcp.c
@@ -974,9 +974,9 @@
}
#endif
#if defined(IPV6_V6ONLY)
- if (listener->options & LI_O_V6ONLY)
+ if (!ext && listener->options & LI_O_V6ONLY)
setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &one, sizeof(one));
- else if (listener->options & LI_O_V4V6)
+ else if (!ext && listener->options & LI_O_V4V6)
setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &zero, sizeof(zero));
#endif