We have a branch in the sandbox named "niosocketimpl-branch" with a replacement for the underlying implementation used by java.net.Socket and ServerSocket. I've mentioned this in previous mails [1]. We also have a draft JEP [2].

I'd like to get the changes that allow for the platform SocketImpl to be replaced into jdk/jdk in advance of the JEP. The reasoning is to reduce the size of the overall patch, make the changes easier to review, and get some of the narly behavior changes out of the way before the main event.

To that end, I've created JDK-8220493 [3] to bring the "preparatory changes" into jdk/jdk. A summary of the changes is:

- ServerSocket is changed to use a platform SocketImpl by default, it used to use the SOCKS SocketImpl.

- Socket use a SOCKS SocketImpl by default. The SOCKS SocketImpl now delegates to a platform SocketImpl rather than extending it. The HTTP SocketImpl is also changed to delegate to a platform SocketImpl.

- ServerSocket.accept has been overhauled to disallow nonsensical combinations of SocketImpl. For example, it is nuts to create a ServerSocket using a custom SocketImpl and have it try to accept a connection with a platform SocketImpl. There is a big matrix of possible scenarios that are tested with a new combinations test. Chris, Michael and I spent time on a white board going through all the possible scenarios to make sure that all sane scenarios work as before, only the nonsensical comminations are disallowed.

- Socket has been changed to wrap the input/output streams returned by the underlying SocketImpl so that closing of these streams will close the socket. This is important to allow for socket implementations outside of the java.net package but it requires changes to JFR as it instruments these changes.

I've created a CSR [4] to document the subtle behavior changes.

The webrev with the corresponding changes is here:
  http://cr.openjdk.java.net/~alanb/8220493/0/webrev/

-Alan

[1] https://mail.openjdk.java.net/pipermail/net-dev/2019-January/012135.html
[2] http://openjdk.java.net/jeps/8218559
[3] https://bugs.openjdk.java.net/browse/JDK-8220493
[4] https://bugs.openjdk.java.net/browse/JDK-8220494


Reply via email to