]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Fix startup failure on Windows 8.1 due to unsupported IPV6_USER_MTU socket option... 730/head
authorLuis Dallos <luis.dallos@googlemail.com>
Tue, 2 Aug 2022 03:00:25 +0000 (23:00 -0400)
committerLuis Dallos <luis.dallos@googlemail.com>
Tue, 2 Aug 2022 03:03:24 +0000 (23:03 -0400)
Newer mingw-w64 (starting from 8.0.1) introduces support for `IPV6_USER_MTU` socket
option [1], which is not supported on Windows 8.1 and older [2]. As there is no way
to avoid this socket option from being picked at compile time when targeting older
versions of Windows, check for `setsockopt(..., IPV6_USER_MTU, ...)` failures at
runtime in order to avoid startup failure on those versions of Windows where the
`IPV6_USER_MTU` socket option is unsupported.

[1]: mirror/mingw-w64@e30bff4
[2]: `WSAGetLastError()` returns `WSAENOPROTOOPT` (`Bad protocol option`) error code

services/listen_dnsport.c

index 1c7c177a007e986d11f4f7ce6dd435aa52007cd5..467419b093980a7160e5261b0a63222afbdce623 100644 (file)
@@ -511,12 +511,14 @@ create_udp_sock(int family, int socktype, struct sockaddr* addr,
                 * instead which is writable; IPV6_MTU is readonly there. */
                if (setsockopt(s, IPPROTO_IPV6, IPV6_USER_MTU,
                        (void*)&mtu, (socklen_t)sizeof(mtu)) < 0) {
-                       log_err("setsockopt(..., IPV6_USER_MTU, ...) failed: %s",
-                               wsa_strerror(WSAGetLastError()));
-                       sock_close(s);
-                       *noproto = 0;
-                       *inuse = 0;
-                       return -1;
+                       if (WSAGetLastError() != WSAENOPROTOOPT) {
+                               log_err("setsockopt(..., IPV6_USER_MTU, ...) failed: %s",
+                                       wsa_strerror(WSAGetLastError()));
+                               sock_close(s);
+                               *noproto = 0;
+                               *inuse = 0;
+                               return -1;
+                       }
                }
 #   endif /* USE_WINSOCK */
 # endif /* IPv6 MTU */