1 /* 2 * Copyright 2014 The Netty Project 3 * 4 * The Netty Project licenses this file to you under the Apache License, 5 * version 2.0 (the "License"); you may not use this file except in compliance 6 * with the License. You may obtain a copy of the License at: 7 * 8 * https://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations 14 * under the License. 15 */ 16 package io.netty5.channel.unix; 17 18 import io.netty5.util.internal.ClassInitializerUtil; 19 import io.netty5.util.internal.UnstableApi; 20 21 import java.io.IOException; 22 import java.net.InetSocketAddress; 23 import java.net.PortUnreachableException; 24 import java.nio.channels.ClosedChannelException; 25 import java.util.concurrent.atomic.AtomicBoolean; 26 27 /** 28 * Tells if <a href="https://netty.io/wiki/native-transports.html">{@code netty-transport-native-unix}</a> is 29 * supported. 30 */ 31 public final class Unix { 32 private static final AtomicBoolean registered = new AtomicBoolean(); 33 34 static { 35 // Preload all classes that will be used in the OnLoad(...) function of JNI to eliminate the possiblity of a 36 // class-loader deadlock. This is a workaround for https://github.com/netty/netty/issues/11209. 37 38 // This needs to match all the classes that are loaded via NETTY_JNI_UTIL_LOAD_CLASS or looked up via 39 // NETTY_JNI_UTIL_FIND_CLASS. 40 ClassInitializerUtil.tryLoadClasses(Unix.class, 41 // netty_unix_errors 42 OutOfMemoryError.class, RuntimeException.class, ClosedChannelException.class, 43 IOException.class, PortUnreachableException.class, 44 45 // netty_unix_socket 46 DatagramSocketAddress.class, DomainDatagramSocketAddress.class, InetSocketAddress.class 47 ); 48 } 49 50 /** 51 * Internal method... Should never be called from the user. 52 * 53 * @param registerTask The task to run if this thread caused registration. 54 */ 55 @UnstableApi 56 public static synchronized void registerInternal(Runnable registerTask) { 57 registerTask.run(); 58 Socket.initialize(); 59 } 60 61 /** 62 * Returns {@code true} if and only if the <a href="https://netty.io/wiki/native-transports.html">{@code 63 * netty_transport_native_unix}</a> is available. 64 */ 65 @Deprecated 66 public static boolean isAvailable() { 67 return false; 68 } 69 70 /** 71 * Ensure that <a href="https://netty.io/wiki/native-transports.html">{@code netty_transport_native_unix}</a> is 72 * available. 73 * 74 * @throws UnsatisfiedLinkError if unavailable 75 */ 76 @Deprecated 77 public static void ensureAvailability() { 78 throw new UnsupportedOperationException(); 79 } 80 81 /** 82 * Returns the cause of unavailability of <a href="https://netty.io/wiki/native-transports.html"> 83 * {@code netty_transport_native_unix}</a>. 84 * 85 * @return the cause if unavailable. {@code null} if available. 86 */ 87 @Deprecated 88 public static Throwable unavailabilityCause() { 89 return new UnsupportedOperationException(); 90 } 91 92 private Unix() { 93 } 94 }