31
31
32
32
import java .util .concurrent .ThreadFactory ;
33
33
import java .util .function .BiFunction ;
34
+ import java .util .function .Supplier ;
34
35
35
36
public class TransportHelper {
36
37
public static final TransportHelper .TransportType TRANSPORT_TYPE = TransportHelper .determineTransportMethod ();
@@ -87,8 +88,8 @@ private static TransportType determineTransportMethod() {
87
88
EpollDatagramChannel ::new ,
88
89
NEW_NETTY ? (threads , factory ) ->
89
90
new MultiThreadIoEventLoopGroup (threads , factory , EpollIoHandler .newFactory ()) : EpollEventLoopGroup ::new ,
90
- Epoll .isTcpFastOpenServerSideAvailable (),
91
- Epoll .isTcpFastOpenClientSideAvailable ()
91
+ getSafely (() -> Epoll .isTcpFastOpenServerSideAvailable () ),
92
+ getSafely (() -> Epoll .isTcpFastOpenClientSideAvailable () )
92
93
);
93
94
}
94
95
@@ -106,8 +107,8 @@ private static TransportType determineTransportMethod() {
106
107
KQueueDatagramChannel ::new ,
107
108
NEW_NETTY ? (threads , factory ) ->
108
109
new MultiThreadIoEventLoopGroup (threads , factory , KQueueIoHandler .newFactory ()) : KQueueEventLoopGroup ::new ,
109
- KQueue .isTcpFastOpenServerSideAvailable (),
110
- KQueue .isTcpFastOpenClientSideAvailable ()
110
+ getSafely (() -> KQueue .isTcpFastOpenServerSideAvailable () ),
111
+ getSafely (() -> KQueue .isTcpFastOpenClientSideAvailable () )
111
112
);
112
113
}
113
114
}
@@ -138,4 +139,12 @@ private static boolean isClassAvailable(String className) {
138
139
return false ;
139
140
}
140
141
}
142
+
143
+ private static boolean getSafely (Supplier <Boolean > supplier ) {
144
+ try {
145
+ return supplier .get ();
146
+ } catch (Throwable ignored ) {
147
+ return false ;
148
+ }
149
+ }
141
150
}
0 commit comments