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

Reply via email to