On Thu, 16 Feb 2023 18:05:05 GMT, Rich DiCroce <[email protected]> wrote:
>> src/java.base/windows/native/libnet/NetworkInterface.c line 523:
>>
>>> 521: * Signature: (Ljava/lang/String;I)Z
>>> 522: */
>>> 523: JNIEXPORT jboolean JNICALL
>>> Java_java_net_NetworkInterface_supportsMulticast0(JNIEnv *env, jclass cls,
>>> jstring name, jint index) {
>>
>> I'm not a big fan of using WBEM here. Also, I'm still trying to figure out
>> when (if ever) this method is supposed to return false
>
> You and me both. As I wrote in the giant comment, I did a lot of
> experimenting. In the end, what I determined was that if the IGMPLevel (IPv4)
> or MldLevel (IPv6) is set to 0 (None), then attempting to join a multicast
> group throws an exception. So that seemed like a reasonable thing that
> supportsMulticast() could measure. Nothing else I tried, including the
> existing GetAdaptersAddresses approach, indicated that multicast was disabled
> in those situations.
>
> Having said that, I'd be okay with ditching all of this code and just
> returning true unconditionally. It's unlikely that multicast would be
> disabled, and a single boolean isn't enough to express the actual setting
> anyway, since Windows apparently lets you disable receiving multicasts while
> still allowing you to send them.
Ha! Apparently I have a machine where the implementation of `supportsMulticast`
implementation makes a difference. On my machine the test
`jdk/java/net/SocketOption/OptionsTest.java` is failing with:
java.net.SocketException: Invalid argument: no further information
at java.base/sun.nio.ch.Net.setInterface6(Native Method)
at
java.base/sun.nio.ch.DatagramChannelImpl.setOption(DatagramChannelImpl.java:377)
at
java.base/sun.nio.ch.DatagramSocketAdaptor.setOption(DatagramSocketAdaptor.java:431)
at java.base/java.net.DatagramSocket.setOption(DatagramSocket.java:1207)
at OptionsTest.test(OptionsTest.java:155)
at OptionsTest.doMulticastSocketTests(OptionsTest.java:235)
at OptionsTest.main(OptionsTest.java:337)
...
It works with the current master. Will try to figure it out.
BTW. did you try running jdk_net tests?
-------------
PR: https://git.openjdk.org/jdk/pull/12593