in protonj2-client/src/main/java/org/apache/qpid/protonj2/client/transport/netty4/Netty4IOContext.java [58:109]
public Netty4IOContext(TransportOptions options, SslOptions ssl, String ioThreadName) {
Objects.requireNonNull(options, "Transport Options cannot be null");
Objects.requireNonNull(ssl, "Transport SSL Options cannot be null");
this.options = options;
this.sslOptions = ssl;
this.threadFactory = new TrackableThreadFactory(ioThreadName, true);
final String[] nativeIOPreference = options.nativeIOPreference();
EventLoopGroup selectedGroup = null;
Class<? extends Channel> selectedChannelClass = null;
if (options.allowNativeIO()) {
for (String nativeID : nativeIOPreference) {
if (EpollSupport.NAME.equalsIgnoreCase(nativeID)) {
if (EpollSupport.isAvailable(options)) {
LOG.trace("Netty Transports will be using Epoll mode");
selectedGroup = EpollSupport.createGroup(1, threadFactory);
selectedChannelClass = EpollSupport.getChannelClass();
break;
}
} else if (IOUringSupport.NAME.equalsIgnoreCase(nativeID)) {
if (IOUringSupport.isAvailable(options)) {
LOG.trace("Netty Transports will be using IO-Uring mode");
selectedGroup = IOUringSupport.createGroup(1, threadFactory);
selectedChannelClass = IOUringSupport.getChannelClass();
break;
}
} else if (KQueueSupport.NAME.equalsIgnoreCase(nativeID)) {
if (KQueueSupport.isAvailable(options)) {
LOG.trace("Netty Transports will be using KQueue mode");
selectedGroup = KQueueSupport.createGroup(1, threadFactory);
selectedChannelClass = KQueueSupport.getChannelClass();
break;
}
} else {
throw new IllegalArgumentException(
String.format("Provided preferred native transport type name: %s, is not supported.", nativeID));
}
}
}
if (selectedGroup == null) {
LOG.trace("Netty Transports will be using NIO mode");
selectedGroup = new NioEventLoopGroup(1, threadFactory);
selectedChannelClass = NioSocketChannel.class;
}
this.group = selectedGroup;
this.channelClass = selectedChannelClass;
}