On Tue, 28 Jun 2022 15:19:17 GMT, Mark Sheppard <[email protected]> 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

Reply via email to