RFR: JDK-8257235: [PATCH] InetAddress.isReachable: Try to use an IPPROTO_ICMP socket type before attempting RAW_SOCK [v2]

Conor Cleary ccleary at openjdk.java.net
Fri Feb 19 14:56:41 UTC 2021


On Fri, 19 Feb 2021 14:48:39 GMT, Conor Cleary <ccleary at openjdk.org> wrote:

>> Jamie Le Tual has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Fixed formatting
>
> src/java.base/unix/native/libnet/Inet4AddressImpl.c line 375:
> 
>> 373:         icmp->icmp_type = ICMP_ECHO;
>> 374:         icmp->icmp_code = 0;
>> 375:         // same result as downcasting the little-endian pid, although we are not longer
> 
> I don't think this is true. When downcasting the pid (which is at this stage in Nework/Big-Endian Order), the host order will be considered. Assuming that the downcast is to `uint16_t`, which it looks like is what icmp_id takes, the 16 least significant bits will be considered (if the host machine is little-endian of course). This is different from the 16 bit right shift. Here is some example output from a short C program I wrote (output is in hex to more easily demonstrate bitwise ops):
> 
> pid size: 4
> int size: 4
> 
> getpid() testing:
> pid   = be67f
> htonl = 7fe60b00
> cast  = b00
>>> 16 = 7fe6

On that note, is it ok to ignore any bits that are shifted out? For example, `7fe60b00 >> 16` results in  `00007fe6` while the trailing `0b00` is ignored.

-------------

PR: https://git.openjdk.java.net/jdk/pull/1502


More information about the net-dev mailing list