RFR: JDK-8286610: Add additional diagnostic output to java/net/DatagramSocket/InterruptibleDatagramSocket.java [v2]
Bill Huang
duke at openjdk.org
Tue Jun 28 16:58:48 UTC 2022
On Tue, 28 Jun 2022 15:19:17 GMT, Mark Sheppard <msheppar at openjdk.org> wrote:
>> Bill Huang has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Rephrased debug messages.
>
> test/jdk/java/net/DatagramSocket/InterruptibleDatagramSocket.java line 111:
>
>> 109: }
>> 110: try (DatagramSocket s = DatagramChannel.open().socket()) {
>> 111: System.out.println("Testing interrrupt of DatagramChannel socket " +
>
> I just noticed that this System out will return a null address:
> Testing interrrupt of DatagramChannel socket receive on endpoint null
> This shows an anomalies between DatagramChannel and DatagramSocket in that an explicit bind is usually required for DC. In this case when the receive is invoked there will be an implicit bind to wildcard and ephemeral port ... The test could be changed to invoke bind(null) on the created DC, maybe as follows:
>
> try (DatagramChannel dc = DatagramChannel.open().bind(null)) {
> System.out.println("Testing interrrupt of DatagramChannel socket " +
> "receive on endpoint " + dc.getLocalAddress());
> test(dc.socket(), true);
> }
>
> This will give the informed output
> Testing interrrupt of DatagramChannel socket receive on endpoint /[0:0:0:0:0:0:0:0]:54572
>
> which trivially highlight a triple r in interrrupt
@msheppar Thank you for pointing out the issue and providing a fix. I noticed the null reference on my system as well. I didn't pay attention to it because it might not be related to the initial failure for its interruptibility in DC. But I totally agree that we should have more meaningful messages in the log to avoid confusion. In your code, the socket address is determined upon binding operation and it will be bound to the socket later. I think we can have a more consolidated code as below, which surrounds the socket creation in a try-resource statement.
try (DatagramSocket s = DatagramChannel.open().bind(null).socket()) {
System.out.println("Testing interrupt of DatagramChannel socket " +
"receive on endpoint " + s.getLocalSocketAddress());
test(s, true);
}
-------------
PR: https://git.openjdk.org/jdk/pull/9278
More information about the net-dev
mailing list