RFR: 8370655: Check EINTR handling InetAddress implementation and NET_ThrowNew

Michael McMahon michaelm at openjdk.org
Wed Dec 10 15:37:46 UTC 2025


Hi,

This change updates the use of NET_ThrowNew in Inet4AddressImpl.c + Inet6AddressImpl.c (unix).
Currently EINTR is incorrectly handled in NET_ThrowNew to throw InterruptedIOException.

The only possible places in these files where EINTR can be returned is in the sendto() calls
for ping4() and ping6() used by the InetAddress.isReachable() API.

The change checks for EINTR returned from those calls and restarts the sendto()
if the timeout allows it. If EINTR is detected by NET_ThrowNew it is thrown as an ordinary
SocketException, but this should not happen.

The fix is only partially tested as it is difficult to make sendto() return EINTR in practice, but
I added a unit test for the new native function that checks if the timeout has expired.

Thanks,
Michael

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

Commit messages:
 - Merge branch 'master' into EINTR-8370655
 - copyright
 - impl update
 - fix impl error
 - fix whitespace
 - impl and test update prior to cleanup
 - update impl
 - initial impl

Changes: https://git.openjdk.org/jdk/pull/28750/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=28750&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8370655
  Stats: 538 lines in 8 files changed: 533 ins; 3 del; 2 mod
  Patch: https://git.openjdk.org/jdk/pull/28750.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/28750/head:pull/28750

PR: https://git.openjdk.org/jdk/pull/28750


More information about the net-dev mailing list