< prev index next > test/lib/jdk/test/lib/net/IPSupport.java
Print this page
/*
- * Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.io.UncheckedIOException;
+ import java.net.Inet4Address;
+ import java.net.Inet6Address;
import java.net.InetAddress;
- import java.net.InetSocketAddress;
- import java.net.Socket;
- import java.net.SocketException;
- import java.net.UnknownHostException;
+ import java.net.ProtocolFamily;
+ import java.net.StandardProtocolFamily;
+ import java.nio.channels.SocketChannel;
import java.security.AccessController;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import java.util.concurrent.Callable;
import jtreg.SkippedException;
private static final boolean hasIPv6;
private static final boolean preferIPv4Stack;
private static final boolean preferIPv6Addresses;
static {
- try {
- InetAddress loopbackIPv4 = InetAddress.getByAddress(
- new byte[] {0x7F, 0x00, 0x00, 0x01});
-
- InetAddress loopbackIPv6 = InetAddress.getByAddress(
- new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01});
-
- hasIPv4 = runPrivilegedAction(() -> hasAddress(loopbackIPv4));
- hasIPv6 = runPrivilegedAction(() -> hasAddress(loopbackIPv6));
- } catch (UnknownHostException e) {
- throw new AssertionError(e);
- }
+ hasIPv4 = runPrivilegedAction(() -> isSupported(Inet4Address.class));
+ hasIPv6 = runPrivilegedAction(() -> isSupported(Inet6Address.class));
preferIPv4Stack = runPrivilegedAction(() -> Boolean.parseBoolean(
System.getProperty("java.net.preferIPv4Stack")));
preferIPv6Addresses = runPrivilegedAction(() -> Boolean.parseBoolean(
System.getProperty("java.net.preferIPv6Addresses")));
if (!preferIPv4Stack && !hasIPv4 && !hasIPv6) {
throw new AssertionError("IPv4 and IPv6 both not available and java.net.preferIPv4Stack is not true");
}
}
- private static boolean hasAddress(InetAddress address) {
- try (Socket socket = new Socket()) {
- socket.bind(new InetSocketAddress(address, 0));
+ private static boolean isSupported(Class<? extends InetAddress> addressType) {
+ ProtocolFamily family = addressType == Inet4Address.class ?
+ StandardProtocolFamily.INET : StandardProtocolFamily.INET6;
+ try (var sc = SocketChannel.open(family)) {
return true;
- } catch (SocketException se) {
+ } catch (IOException | UnsupportedOperationException ex) {
return false;
- } catch (IOException e) {
- throw new UncheckedIOException(e);
}
}
private static <T> T runPrivilegedAction(Callable<T> callable) {
try {
< prev index next >