You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.3 KiB
37 lines
1.3 KiB
3 years ago
|
diff -up ./cmd/selfserv/selfserv.c.ipv6_fix ./cmd/selfserv/selfserv.c
|
||
|
--- ./cmd/selfserv/selfserv.c.ipv6_fix 2021-09-14 11:40:06.176408531 -0700
|
||
|
+++ ./cmd/selfserv/selfserv.c 2021-09-14 11:49:46.361907308 -0700
|
||
|
@@ -1717,14 +1717,28 @@ getBoundListenSocket(unsigned short port
|
||
|
PRNetAddr addr;
|
||
|
PRSocketOptionData opt;
|
||
|
|
||
|
- addr.inet.family = PR_AF_INET;
|
||
|
- addr.inet.ip = PR_INADDR_ANY;
|
||
|
- addr.inet.port = PR_htons(port);
|
||
|
+ if (PR_SetNetAddr(PR_IpAddrAny, PR_AF_INET6, port, &addr) != PR_SUCCESS) {
|
||
|
+ errExit("PR_SetNetAddr");
|
||
|
+ }
|
||
|
|
||
|
- listen_sock = PR_NewTCPSocket();
|
||
|
+ listen_sock = PR_OpenTCPSocket(PR_AF_INET6);
|
||
|
if (listen_sock == NULL) {
|
||
|
errExit("PR_NewTCPSocket");
|
||
|
}
|
||
|
+ /* NSPR has a bug where set inheritable doesn't work unless it's a pure
|
||
|
+ * NSPR socket. If we have an IPV6 emulator on an IPV4 socket, it will fail.
|
||
|
+ * In that case just open an IPV4 socket instead */
|
||
|
+ if (PR_NSPR_IO_LAYER != PR_GetLayersIdentity(listen_sock)) {
|
||
|
+ PR_Close(listen_sock);
|
||
|
+ addr.inet.family = PR_AF_INET;
|
||
|
+ addr.inet.ip = PR_INADDR_ANY;
|
||
|
+ addr.inet.port = PR_htons(port);
|
||
|
+
|
||
|
+ listen_sock = PR_NewTCPSocket();
|
||
|
+ if (listen_sock == NULL) {
|
||
|
+ errExit("PR_NewTCPSocket");
|
||
|
+ }
|
||
|
+ }
|
||
|
|
||
|
opt.option = PR_SockOpt_Nonblocking;
|
||
|
opt.value.non_blocking = PR_FALSE;
|