< prev index next >
src/jdk.net/share/classes/jdk/net/ExtendedSocketOptions.java
Print this page
*** 178,194 ****
--- 178,215 ----
* @since 15
*/
public static final SocketOption<Integer> SO_INCOMING_NAPI_ID
= new ExtSocketOption<Integer>("SO_INCOMING_NAPI_ID", Integer.class);
+ /**
+ * Unix Domain peer credentials.
+ *
+ * <p> The value of this socket option is a {@link UnixDomainPrincipal} that
+ * represents the credentials of a peer connected to a Unix Domain socket.
+ * The credentials are those that applied at the time the socket was first
+ * connected or accepted.
+ *
+ * <p> The socket option is read-only and an attempt to set the socket option
+ * will throw {@code SocketException}. {@code SocketException} is also thrown
+ * when attempting to get the value of the socket option on an unconnected Unix
+ * Domain socket.
+ *
+ * @since 16
+ */
+ public static final SocketOption<UnixDomainPrincipal> SO_PEERCRED
+ = new ExtSocketOption<UnixDomainPrincipal>
+ ("SO_PEERCRED", UnixDomainPrincipal.class);
+
private static final PlatformSocketOptions platformSocketOptions =
PlatformSocketOptions.get();
private static final boolean quickAckSupported =
platformSocketOptions.quickAckSupported();
private static final boolean keepAliveOptSupported =
platformSocketOptions.keepAliveOptionsSupported();
+ private static final boolean peerCredentialsSupported =
+ platformSocketOptions.peerCredentialsSupported();
private static final boolean incomingNapiIdOptSupported =
platformSocketOptions.incomingNapiIdSupported();
private static final Set<SocketOption<?>> extendedOptions = options();
static Set<SocketOption<?>> options() {
*** 200,209 ****
--- 221,233 ----
options.add(SO_INCOMING_NAPI_ID);
}
if (keepAliveOptSupported) {
options.addAll(Set.of(TCP_KEEPCOUNT, TCP_KEEPIDLE, TCP_KEEPINTERVAL));
}
+ if (peerCredentialsSupported) {
+ options.add(SO_PEERCRED);
+ }
return Collections.unmodifiableSet(options);
}
static {
// Registers the extended socket options with the base module.
*** 231,240 ****
--- 255,266 ----
} else if (option == SO_INCOMING_NAPI_ID) {
if (!incomingNapiIdOptSupported)
throw new UnsupportedOperationException("Attempt to set unsupported option " + option);
else
throw new SocketException("Attempt to set read only option " + option);
+ } else if (option == SO_PEERCRED) {
+ throw new SocketException("SO_PEERCRED cannot be set ");
} else {
throw new InternalError("Unexpected option " + option);
}
}
*** 253,262 ****
--- 279,290 ----
return getTcpkeepAliveProbes(fd);
} else if (option == TCP_KEEPIDLE) {
return getTcpKeepAliveTime(fd);
} else if (option == TCP_KEEPINTERVAL) {
return getTcpKeepAliveIntvl(fd);
+ } else if (option == SO_PEERCRED) {
+ return getSoPeerCred(fd);
} else if (option == SO_INCOMING_NAPI_ID) {
return getIncomingNapiId(fd);
} else {
throw new InternalError("Unexpected option " + option);
}
*** 270,279 ****
--- 298,312 ----
private static void setQuickAckOption(FileDescriptor fd, boolean enable)
throws SocketException {
platformSocketOptions.setQuickAck(fdAccess.get(fd), enable);
}
+ private static Object getSoPeerCred(FileDescriptor fd)
+ throws SocketException {
+ return platformSocketOptions.getSoPeerCred(fdAccess.get(fd));
+ }
+
private static Object getQuickAckOption(FileDescriptor fd)
throws SocketException {
return platformSocketOptions.getQuickAck(fdAccess.get(fd));
}
*** 343,352 ****
--- 376,389 ----
static PlatformSocketOptions get() {
return instance;
}
+ boolean peerCredentialsSupported() {
+ return false;
+ }
+
void setQuickAck(int fd, boolean on) throws SocketException {
throw new UnsupportedOperationException("unsupported TCP_QUICKACK option");
}
boolean getQuickAck(int fd) throws SocketException {
*** 367,376 ****
--- 404,417 ----
void setTcpKeepAliveTime(int fd, final int value) throws SocketException {
throw new UnsupportedOperationException("unsupported TCP_KEEPIDLE option");
}
+ UnixDomainPrincipal getSoPeerCred(int fd) throws SocketException {
+ throw new UnsupportedOperationException("unsupported SO_PEERCRED option");
+ }
+
void setTcpKeepAliveIntvl(int fd, final int value) throws SocketException {
throw new UnsupportedOperationException("unsupported TCP_KEEPINTVL option");
}
int getTcpkeepAliveProbes(int fd) throws SocketException {
< prev index next >