On Mon, 1 Feb 2021 16:56:03 GMT, Daniel Fuchs <dfu...@openjdk.org> wrote:
>> DatagramSocket has a DatagramSocket.setDatagramSocketImplFactory method that >> allows to globally replace the default DatagramSocket/MulticastSocket >> implementation provided by the JDK. This was provided as a way in early JDK >> releases to replace the system wide implementation. It has been mostly >> obsolete since Java 1.4. A DatagramSocket can be created to use a custom >> implementation by extending DatagramSocket and using the protected >> constructor that takes the impl as a parameter. However, MulticastSocket >> doesn't provide such a constructor. >> >> Though DatagramSocket can be subclassed to provide a custom implementation, >> MulticastSocket, if subclassed, will still create its default >> implementation, even when all methods of MulticastSocket are overridden in >> order not to use it. This will create a file descriptor / socket leak. >> >> The only solution to avoid that is currently to replace the default >> DatagramSocketImplFactory by calling the static >> DatagramSocket.setDatagramSocketImplFactory. We need a better solution. >> >> The solution proposed in this RFE is to allow DatagramSocket to both send >> and receive multicast datagrams. DatagramSocket has always had the ability >> to send multicast packets. In Java 15, DatagramSocket has been improved to >> support getting/setting multicast options. This change proposes to move >> `joinGroup(SocketAddress, NetworkInterface)` and `leaveGroup(SocketAddress, >> NetworkInterface)` up from MulticastSocket into DatagramSocket. >> >> An application that needs to completely replace the default multicast >> implementation, and that cannot be easily updated to use DatagramChannel, >> can do so by subclassing DatagramSocket instead. >> >> In addition, this change improves the documentation of DatagramSocket and >> MulticastSocket to show how convenience getters/setters map to >> StandardSocketOptions, and adds an `@apiNote` to show how DatagramSocket can >> be used for multicasting. >> >> Specdiff can be seen here: >> http://cr.openjdk.java.net/~dfuchs/ds-ms-8237352-specdiff.07/overview-summary.html >> >> CSR: >> https://bugs.openjdk.java.net/browse/JDK-8260667 > > Daniel Fuchs has updated the pull request with a new target base due to a > merge or a rebase. The incremental webrev excludes the unrelated changes > brought in by the merge/rebase. The pull request contains ten additional > commits since the last revision: > > - Integrated review comments. > - Merge branch 'master' into ds-ms-8237352 > - Integrated review comments. > - Fixup @bug in the tests > - Fixup @see for leaveGroup > - Restore @apiNote for leaveGroup > - Overrides in MulticastSocket don't need the @apiNote > - 8237352: Evaluate how to write a custom DatagramSocket/MulticastSocket > without using DatagramSocketImplFactory > - 8237352: Evaluate how to write a custom DatagramSocket/MulticastSocket > without using DatagramSocketImplFactory The API/docs change looks fine. ------------- Marked as reviewed by alanb (Reviewer). PR: https://git.openjdk.java.net/jdk/pull/2312