# HG changeset patch # User jbe # Date 1609729775 -3600 # Node ID fb8f86d3703ed0c7cd26e7e72d09d347794b970b # Parent 86121074cd91ffaa2692a5d089c75ad09fbcc225 Make moonbridge_io.tcplisten(nil, port) accept both IPv6 and IPv4 connections independently of operating system setting; if first argument is non-nil and resolves to an IPv6 address, never accept IPv4 connections diff -r 86121074cd91 -r fb8f86d3703e moonbridge_io.c --- a/moonbridge_io.c Sun Dec 20 20:59:40 2020 +0100 +++ b/moonbridge_io.c Mon Jan 04 04:09:35 2021 +0100 @@ -1345,6 +1345,17 @@ return 2; } } + if (addrinfo->ai_family == AF_INET6) { + const int ipv6onlyval = (host != NULL) ? 1 : 0; + if (setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &ipv6onlyval, sizeof(ipv6onlyval))) { + moonbr_io_prepare_errmsg(); + freeaddrinfo(res); + close(sock); + lua_pushnil(L); + lua_pushfstring(L, "Error while setting IPV6_V6ONLY with setsockopt: %s", errmsg); + return 2; + } + } if (bind(sock, addrinfo->ai_addr, addrinfo->ai_addrlen)) { moonbr_io_prepare_errmsg(); freeaddrinfo(res);