< prev index next >
src/java.base/share/classes/java/net/ServerSocket.java
Print this page
@@ -74,14 +74,15 @@
* Are we using an older SocketImpl?
*/
private boolean oldImpl = false;
/**
- * Package-private constructor to create a ServerSocket associated with
- * the given SocketImpl.
+ * Creates a server socket with a user-specified SocketImpl.
+ *
+ * @param impl the user-specified SocketImpl
*/
- ServerSocket(SocketImpl impl) {
+ protected ServerSocket(SocketImpl impl) {
this.impl = impl;
impl.setServerSocket(this);
}
/**
@@ -988,10 +989,11 @@
return getImpl().getOption(name);
}
private static Set<SocketOption<?>> options;
private static boolean optionsSet = false;
+ private static boolean rdmaOptionsSet = false;
/**
* Returns a set of the socket options supported by this server socket.
*
* This method will continue to return the set of options even after
@@ -1002,20 +1004,28 @@
*
* @since 9
*/
public Set<SocketOption<?>> supportedOptions() {
synchronized (ServerSocket.class) {
- if (optionsSet) {
+ String currentImpl = impl.getClass().getName();
+ boolean rdma = currentImpl.equals("rdma.ch.RdmaSocketImpl");
+ if ((rdma && rdmaOptionsSet) || (!rdma && optionsSet)) {
return options;
}
try {
SocketImpl impl = getImpl();
options = Collections.unmodifiableSet(impl.supportedOptions());
} catch (IOException e) {
options = Collections.emptySet();
}
+ if (rdma) {
+ rdmaOptionsSet = true;
+ optionsSet = false;
+ } else {
+ rdmaOptionsSet = false;
optionsSet = true;
+ }
return options;
}
}
static {
< prev index next >