jdk/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java
changeset 1152 29d6145d1097
parent 2 90ce3da70b43
child 1247 b4c26443dee5
--- a/jdk/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java	Sun Aug 31 18:32:59 2008 +0100
+++ b/jdk/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java	Sun Aug 31 18:39:01 2008 +0100
@@ -44,9 +44,6 @@
     // The channel being adapted
     private final ServerSocketChannelImpl ssc;
 
-    // Option adaptor object, created on demand
-    private volatile OptionAdaptor opts = null;
-
     // Timeout "option" value for accepts
     private volatile int timeout = 0;
 
@@ -174,18 +171,21 @@
         return timeout;
     }
 
-    private OptionAdaptor opts() {
-        if (opts == null)
-            opts = new OptionAdaptor(ssc);
-        return opts;
-    }
-
     public void setReuseAddress(boolean on) throws SocketException {
-        opts().setReuseAddress(on);
+        try {
+            ssc.setOption(StandardSocketOption.SO_REUSEADDR, on);
+        } catch (IOException x) {
+            Net.translateToSocketException(x);
+        }
     }
 
     public boolean getReuseAddress() throws SocketException {
-        return opts().getReuseAddress();
+        try {
+            return ssc.getOption(StandardSocketOption.SO_REUSEADDR).booleanValue();
+        } catch (IOException x) {
+            Net.translateToSocketException(x);
+            return false;       // Never happens
+        }
     }
 
     public String toString() {
@@ -197,11 +197,23 @@
     }
 
     public void setReceiveBufferSize(int size) throws SocketException {
-        opts().setReceiveBufferSize(size);
+        // size 0 valid for ServerSocketChannel, invalid for ServerSocket
+        if (size <= 0)
+            throw new IllegalArgumentException("size cannot be 0 or negative");
+        try {
+            ssc.setOption(StandardSocketOption.SO_RCVBUF, size);
+        } catch (IOException x) {
+            Net.translateToSocketException(x);
+        }
     }
 
     public int getReceiveBufferSize() throws SocketException {
-        return opts().getReceiveBufferSize();
+        try {
+            return ssc.getOption(StandardSocketOption.SO_RCVBUF).intValue();
+        } catch (IOException x) {
+            Net.translateToSocketException(x);
+            return -1;          // Never happens
+        }
     }
 
 }