< prev index next >
src/java.base/unix/classes/java/net/PlainDatagramSocketImpl.java
Print this page
@@ -42,43 +42,56 @@
static {
init();
}
protected <T> void setOption(SocketOption<T> name, T value) throws IOException {
- if (!name.equals(ExtendedSocketOptions.SO_FLOW_SLA)) {
+ if (!(name.equals(ExtendedSocketOptions.SO_FLOW_SLA)
+ || (name.equals(ExtendedSocketOptions.SO_REUSEPORT)))) {
super.setOption(name, value);
} else {
if (isClosed()) {
throw new SocketException("Socket closed");
}
+ if (name.equals(ExtendedSocketOptions.SO_FLOW_SLA)) {
checkSetOptionPermission(name);
checkValueType(value, SocketFlow.class);
setFlowOption(getFileDescriptor(), (SocketFlow)value);
+ } else {
+ checkValueType(value, Boolean.class);
+ setReusePortOption(getFileDescriptor(), ((Boolean)value).booleanValue());
+ }
}
}
@SuppressWarnings("unchecked")
protected <T> T getOption(SocketOption<T> name) throws IOException {
- if (!name.equals(ExtendedSocketOptions.SO_FLOW_SLA)) {
+ if (!(name.equals(ExtendedSocketOptions.SO_FLOW_SLA)
+ || (name.equals(ExtendedSocketOptions.SO_REUSEPORT)))) {
return super.getOption(name);
}
if (isClosed()) {
throw new SocketException("Socket closed");
}
+ if (name.equals(ExtendedSocketOptions.SO_FLOW_SLA)) {
checkGetOptionPermission(name);
SocketFlow flow = SocketFlow.create();
getFlowOption(getFileDescriptor(), flow);
return (T)flow;
}
+ return (T)getReusePortOption(getFileDescriptor());
+ }
protected Set<SocketOption<?>> supportedOptions() {
HashSet<SocketOption<?>> options = new HashSet<>(
super.supportedOptions());
if (flowSupported()) {
options.add(ExtendedSocketOptions.SO_FLOW_SLA);
}
+ if (reuseportSupported()) {
+ options.add(ExtendedSocketOptions.SO_REUSEPORT);
+ }
return options;
}
protected void socketSetOption(int opt, Object val) throws SocketException {
try {
< prev index next >