1 /* |
1 /* |
2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. Oracle designates this |
7 * published by the Free Software Foundation. Oracle designates this |
436 return JNI_TRUE; |
436 return JNI_TRUE; |
437 } |
437 } |
438 #endif /* AF_INET6 */ |
438 #endif /* AF_INET6 */ |
439 } |
439 } |
440 #endif /* DONT_ENABLE_IPV6 */ |
440 #endif /* DONT_ENABLE_IPV6 */ |
|
441 |
|
442 jint reuseport_supported() |
|
443 { |
|
444 /* Do a simple dummy call, and try to figure out from that */ |
|
445 int one = 1; |
|
446 int rv, s; |
|
447 s = socket(PF_INET, SOCK_STREAM, 0); |
|
448 if (s < 0) { |
|
449 return JNI_FALSE; |
|
450 } |
|
451 rv = setsockopt(s, SOL_SOCKET, SO_REUSEPORT, (void *)&one, sizeof(one)); |
|
452 if (rv != 0) { |
|
453 rv = JNI_FALSE; |
|
454 } else { |
|
455 rv = JNI_TRUE; |
|
456 } |
|
457 close(s); |
|
458 return rv; |
|
459 } |
441 |
460 |
442 void NET_ThrowUnknownHostExceptionWithGaiError(JNIEnv *env, |
461 void NET_ThrowUnknownHostExceptionWithGaiError(JNIEnv *env, |
443 const char* hostname, |
462 const char* hostname, |
444 int gai_error) |
463 int gai_error) |
445 { |
464 { |
1012 { java_net_SocketOptions_SO_LINGER, SOL_SOCKET, SO_LINGER }, |
1031 { java_net_SocketOptions_SO_LINGER, SOL_SOCKET, SO_LINGER }, |
1013 { java_net_SocketOptions_SO_SNDBUF, SOL_SOCKET, SO_SNDBUF }, |
1032 { java_net_SocketOptions_SO_SNDBUF, SOL_SOCKET, SO_SNDBUF }, |
1014 { java_net_SocketOptions_SO_RCVBUF, SOL_SOCKET, SO_RCVBUF }, |
1033 { java_net_SocketOptions_SO_RCVBUF, SOL_SOCKET, SO_RCVBUF }, |
1015 { java_net_SocketOptions_SO_KEEPALIVE, SOL_SOCKET, SO_KEEPALIVE }, |
1034 { java_net_SocketOptions_SO_KEEPALIVE, SOL_SOCKET, SO_KEEPALIVE }, |
1016 { java_net_SocketOptions_SO_REUSEADDR, SOL_SOCKET, SO_REUSEADDR }, |
1035 { java_net_SocketOptions_SO_REUSEADDR, SOL_SOCKET, SO_REUSEADDR }, |
|
1036 { java_net_SocketOptions_SO_REUSEPORT, SOL_SOCKET, SO_REUSEPORT }, |
1017 { java_net_SocketOptions_SO_BROADCAST, SOL_SOCKET, SO_BROADCAST }, |
1037 { java_net_SocketOptions_SO_BROADCAST, SOL_SOCKET, SO_BROADCAST }, |
1018 { java_net_SocketOptions_IP_TOS, IPPROTO_IP, IP_TOS }, |
1038 { java_net_SocketOptions_IP_TOS, IPPROTO_IP, IP_TOS }, |
1019 { java_net_SocketOptions_IP_MULTICAST_IF, IPPROTO_IP, IP_MULTICAST_IF }, |
1039 { java_net_SocketOptions_IP_MULTICAST_IF, IPPROTO_IP, IP_MULTICAST_IF }, |
1020 { java_net_SocketOptions_IP_MULTICAST_IF2, IPPROTO_IP, IP_MULTICAST_IF }, |
1040 { java_net_SocketOptions_IP_MULTICAST_IF2, IPPROTO_IP, IP_MULTICAST_IF }, |
1021 { java_net_SocketOptions_IP_MULTICAST_LOOP, IPPROTO_IP, IP_MULTICAST_LOOP }, |
1041 { java_net_SocketOptions_IP_MULTICAST_LOOP, IPPROTO_IP, IP_MULTICAST_LOOP }, |