On Fri, 29 Jan 2021 18:54:55 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 > > Here is the draft CSR for review: > > https://bugs.openjdk.java.net/browse/JDK-8260667 I think the title can be changed to something like "Update DatagramSocket to add support for joining multicast groups" or something that makes it clearer what the changes are about. ------------- PR: https://git.openjdk.java.net/jdk/pull/2312