moonbridge
changeset 329:fb8f86d3703e
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
author | jbe |
---|---|
date | Mon Jan 04 04:09:35 2021 +0100 (2021-01-04) |
parents | 86121074cd91 |
children | 73303a85266f |
files | moonbridge_io.c |
line diff
1.1 --- a/moonbridge_io.c Sun Dec 20 20:59:40 2020 +0100 1.2 +++ b/moonbridge_io.c Mon Jan 04 04:09:35 2021 +0100 1.3 @@ -1345,6 +1345,17 @@ 1.4 return 2; 1.5 } 1.6 } 1.7 + if (addrinfo->ai_family == AF_INET6) { 1.8 + const int ipv6onlyval = (host != NULL) ? 1 : 0; 1.9 + if (setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &ipv6onlyval, sizeof(ipv6onlyval))) { 1.10 + moonbr_io_prepare_errmsg(); 1.11 + freeaddrinfo(res); 1.12 + close(sock); 1.13 + lua_pushnil(L); 1.14 + lua_pushfstring(L, "Error while setting IPV6_V6ONLY with setsockopt: %s", errmsg); 1.15 + return 2; 1.16 + } 1.17 + } 1.18 if (bind(sock, addrinfo->ai_addr, addrinfo->ai_addrlen)) { 1.19 moonbr_io_prepare_errmsg(); 1.20 freeaddrinfo(res);