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

Reply via email to