diff --git a/GSv6Fwd/GSv6Fwd.cpp b/GSv6Fwd/GSv6Fwd.cpp index d88c4bf..69bb1c1 100644 --- a/GSv6Fwd/GSv6Fwd.cpp +++ b/GSv6Fwd/GSv6Fwd.cpp @@ -296,6 +296,7 @@ int StartTcpRelay(unsigned short Port) SOCKADDR_IN6 addr6; HANDLE thread; PLISTENER_TUPLE tuple; + DWORD val; listeningSocket = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP); if (listeningSocket == INVALID_SOCKET) { @@ -303,6 +304,11 @@ int StartTcpRelay(unsigned short Port) return WSAGetLastError(); } + val = PROTECTION_LEVEL_UNRESTRICTED; + if (setsockopt(listeningSocket, IPPROTO_IPV6, IPV6_PROTECTION_LEVEL, (char*)&val, sizeof(val)) == SOCKET_ERROR) { + printf("setsockopt(IPV6_PROTECTION_LEVEL) failed: %d\n", WSAGetLastError()); + } + RtlZeroMemory(&addr6, sizeof(addr6)); addr6.sin6_family = AF_INET6; addr6.sin6_port = htons(Port); @@ -513,6 +519,11 @@ int StartUdpRelay(unsigned short Port) return WSAGetLastError(); } + val = PROTECTION_LEVEL_UNRESTRICTED; + if (setsockopt(ipv6Socket, IPPROTO_IPV6, IPV6_PROTECTION_LEVEL, (char*)&val, sizeof(val)) == SOCKET_ERROR) { + printf("setsockopt(IPV6_PROTECTION_LEVEL) failed: %d\n", WSAGetLastError()); + } + RtlZeroMemory(&addr6, sizeof(addr6)); addr6.sin6_family = AF_INET6; addr6.sin6_port = htons(Port);