On Tue, 22 Aug 2023 18:21:17 GMT, Weibing Xiao <d...@openjdk.org> wrote:
>> Please refer to JDK-8314063. >> >> The failure scenario is due to the setting of connection timeout. It is >> either too small or not an optimal value for the system. When the client >> tries to connect to the server with LDAPs protocol. It requires the >> handshake after the socket is created and connected, but it fails due to >> connection timeout and leaves the socket open. It is not closed properly due >> to the exception handling in the JDK code. >> >> The change is adding a try/catch block and closing the socket in the catch >> block, and the format of the code got changed consequently. > > Weibing Xiao has updated the pull request incrementally with one additional > commit since the last revision: > > format the code Resuggesting restructure to createConnectionSocket methods -- to instantiate Socket explicitly in one place and to explicitly use connect in all cases ` ``` private Socket createConnectionSocket (String host, int port, int connectTimeout) throws Exception { InetSocketAddress endpoint = createInetSocketAddress(host, port); Socket socket = new Socket(); if (connectTimeout > 0) { if (debug) { System.err.println("Connection: creating socket with " + "a timeout"); } socket.connect(endpoint, connectTimeout); } else { if (debug) { System.err.println("Connection: creating socket"); } // connected socket socket.connect(endpoint); } return socket; } // create the socket with the provided factory private Socket createConnectionSocket(String host, int port, String socketFactory, int connectTimeout) throws Exception { @SuppressWarnings("unchecked") Class<? extends SocketFactory> socketFactoryClass = (Class<? extends SocketFactory>) Obj.helper.loadClass(socketFactory); Method getDefault = socketFactoryClass.getMethod("getDefault", new Class<?>[]{}); SocketFactory factory = (SocketFactory) getDefault.invoke(null, new Object[]{}); InetSocketAddress endpoint = createInetSocketAddress(host, port); // create unconnected socket Socket socket = factory.createSocket(); // create the socket if (connectTimeout > 0) { if (debug) { System.err.println("Connection: creating socket with " + "a timeout using supplied socket factory"); } // connected socket socket.connect(endpoint, connectTimeout); } else { if (debug) { System.err.println("Connection: creating socket using " + "supplied socket factory"); } // connected socket socket.connect(endpoint); } return socket; } ` ------------- PR Comment: https://git.openjdk.org/jdk/pull/15294#issuecomment-1689007121