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

Reply via email to