On Fri, 29 Jan 2021 11:34:07 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 This pull request has now been integrated. Changeset: 2c28e364 Author: Daniel Fuchs <dfu...@openjdk.org> URL: https://git.openjdk.java.net/jdk/commit/2c28e364 Stats: 995 lines in 5 files changed: 884 ins; 64 del; 47 mod 8237352: Update DatagramSocket to add support for joining multicast groups Reviewed-by: alanb ------------- PR: https://git.openjdk.java.net/jdk/pull/2312