src/solaris/classes/java/net/PlainDatagramSocketImpl.java

Print this page
rev 9687 : * * *

@@ -23,10 +23,15 @@
  * questions.
  */
 package java.net;
 
 import java.io.IOException;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Collections;
+import jdk.net.*;
+import static sun.net.ExtendedOptionsImpl.*;
 
 /*
  * On Unix systems we simply delegate to native methods.
  *
  * @author Chris Hegarty

@@ -36,10 +41,50 @@
 {
     static {
         init();
     }
 
+    protected <T> void setOption(SocketOption<T> name, T value)
+        throws IOException
+    {
+        if (!name.equals(ExtendedSocketOptions.SO_FLOW_SLA)) {
+            super.setOption(name, value);
+        } else {
+            if (isClosed()) {
+                throw new SocketException("Socket closed");
+            }
+            setSecurityCheck(name);
+            checkValueType(value, SocketFlow.class);
+            setFlowOption(getFileDescriptor(), (SocketFlow)value);
+        }
+    }
+
+    protected <T> T getOption(SocketOption<T> name) throws IOException
+    {
+        if (!name.equals(ExtendedSocketOptions.SO_FLOW_SLA)) {
+            return super.getOption(name);
+        }
+        if (isClosed()) {
+            throw new SocketException("Socket closed");
+        }
+        getSecurityCheck(name);
+        SocketFlow flow = SocketFlow.create();
+        getFlowOption(getFileDescriptor(), flow);
+        return (T)flow;
+    }
+
+    protected Set<SocketOption<?>> supportedOptions()
+    {
+        HashSet<SocketOption<?>> options = new HashSet(
+            super.supportedOptions());
+
+        if (flowSupported()) {
+            options.add(ExtendedSocketOptions.SO_FLOW_SLA);
+        }
+        return options;
+    }
+
     protected synchronized native void bind0(int lport, InetAddress laddr)
         throws SocketException;
 
     protected native void send(DatagramPacket p) throws IOException;