RFR: 8302659: Modernize Windows native code for NetworkInterface [v2]
Daniel Jeliński
djelinski at openjdk.org
Thu Feb 16 18:56:30 UTC 2023
On Thu, 16 Feb 2023 18:05:05 GMT, Rich DiCroce <duke at openjdk.org> 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
More information about the build-dev
mailing list