< prev index next >

test/lib/jdk/test/lib/net/IPSupport.java

Print this page
*** 1,7 ***
  /*
!  * Copyright (c) 2019, 2020, 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.
--- 1,7 ---
  /*
!  * 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.

*** 25,15 ***
  
  import java.io.ByteArrayOutputStream;
  import java.io.IOException;
  import java.io.PrintStream;
  import java.io.UncheckedIOException;
  import java.net.InetAddress;
! import java.net.InetSocketAddress;
! import java.net.Socket;
! import java.net.SocketException;
- import java.net.UnknownHostException;
  import java.security.AccessController;
  import java.security.PrivilegedActionException;
  import java.security.PrivilegedExceptionAction;
  import java.util.concurrent.Callable;
  import jtreg.SkippedException;
--- 25,16 ---
  
  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.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;

*** 47,40 ***
      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);
-         }
          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));
              return true;
!         } catch (SocketException se) {
              return false;
-         } catch (IOException e) {
-             throw new UncheckedIOException(e);
          }
      }
  
      private static <T> T runPrivilegedAction(Callable<T> callable) {
          try {
--- 48,28 ---
      private static final boolean hasIPv6;
      private static final boolean preferIPv4Stack;
      private static final boolean preferIPv6Addresses;
  
      static {
!         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 isSupported(Class<? extends InetAddress> addressType) {
!         ProtocolFamily family = addressType == Inet4Address.class ?
!                 StandardProtocolFamily.INET : StandardProtocolFamily.INET6;
+         try (var sc = SocketChannel.open(family)) {
              return true;
!         } catch (IOException | UnsupportedOperationException ex) {
              return false;
          }
      }
  
      private static <T> T runPrivilegedAction(Callable<T> callable) {
          try {
< prev index next >