src/java.base/share/classes/java/net/Socket.java
branchniosocketimpl-branch
changeset 57248 48d523dfbdc9
parent 57240 f0e45a80ab8f
child 57268 adcdd45830a0
--- a/src/java.base/share/classes/java/net/Socket.java	Tue Mar 05 10:02:36 2019 +0000
+++ b/src/java.base/share/classes/java/net/Socket.java	Sat Mar 09 12:49:54 2019 +0000
@@ -155,12 +155,14 @@
                                   epoint.getPort());
             }
 
-            SocketImpl si = SocketImpl.createPlatformSocketImpl(false);
-            impl = (type == Proxy.Type.SOCKS) ? new SocksSocketImpl(p, si)
-                                              : new HttpConnectSocketImpl(p, si);
+            // create a SOCKS or HTTP SocketImpl that delegates to a platform SocketImpl
+            SocketImpl delegate = SocketImpl.createPlatformSocketImpl(false);
+            impl = (type == Proxy.Type.SOCKS) ? new SocksSocketImpl(p, delegate)
+                                              : new HttpConnectSocketImpl(p, delegate);
             impl.setSocket(this);
         } else {
             if (p == Proxy.NO_PROXY) {
+                // create a platform or custom SocketImpl for the DIRECT case
                 SocketImplFactory factory = Socket.factory;
                 if (factory == null) {
                     impl = SocketImpl.createPlatformSocketImpl(false);
@@ -512,15 +514,6 @@
         });
     }
 
-    static SocketImpl createImpl() {
-        SocketImplFactory factory = Socket.factory;
-        if (factory != null) {
-            return factory.createSocketImpl();
-        } else {
-            return SocketImpl.createPlatformSocketImpl(false);
-        }
-    }
-
     void setImpl(SocketImpl si) {
          impl = si;
          impl.setSocket(this);
@@ -536,8 +529,9 @@
             impl = factory.createSocketImpl();
             checkOldImpl();
         } else {
-            SocketImpl si = SocketImpl.createPlatformSocketImpl(false);
-            impl = new SocksSocketImpl(si);
+            // create a SOCKS SocketImpl that delegates to a platform SocketImpl
+            SocketImpl delegate = SocketImpl.createPlatformSocketImpl(false);
+            impl = new SocksSocketImpl(delegate);
         }
         if (impl != null)
             impl.setSocket(this);
@@ -1736,6 +1730,10 @@
      */
     private static volatile SocketImplFactory factory;
 
+    static SocketImplFactory socketImplFactory() {
+        return factory;
+    }
+
     /**
      * Sets the client socket implementation factory for the
      * application. The factory can be specified only once.