X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/f8950c27dbaa98501a64cc3bdb98657c64641c4e..47828bd9813b146e8569355b3083847299dd8729:/server/peer.c?ds=sidebyside diff --git a/server/peer.c b/server/peer.c index 34bfb6c4..94629213 100644 --- a/server/peer.c +++ b/server/peer.c @@ -791,6 +791,7 @@ void p_init(struct addrinfo *ailist) { int fd; int len = PKBUFSZ; + int yes = 1; int i; struct addrinfo *ai; unsigned port, lastport = 0; @@ -813,6 +814,11 @@ void p_init(struct addrinfo *ailist) if ((fd = socket(ai->ai_family, SOCK_DGRAM, 0)) < 0) die(EXIT_FAILURE, "socket creation failed: %s", strerror(errno)); + if (i == AFIX_INET6 && + setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &yes, sizeof(yes))) { + die(EXIT_FAILURE, "failed to set IPv6-only state: %s", + strerror(errno)); + } assert(ai->ai_addrlen <= sizeof(a)); memcpy(&a, ai->ai_addr, ai->ai_addrlen); if ((port = getport(&a)) == 0 && lastport) setport(&a, lastport);