This PR, addressing 8343791, enhances `Socket#connect()` and effectively makes it close the `Socket` if `SocketImpl#connect()` fails with a
1. `SocketTimeoutException` 2. `InterruptedIOException` in an interrupted vthread 3. `IOException` that is *not* an `UnknownHostException` On the other hand, socket will *not* be closed if `SocketImpl#connect()` fails with a * `InterruptedIOException` that is neither a `SocketTimeoutException`, nor from an interrupted vthread * `UnknownHostException` Note that in case of an `UHE`, `Socket` and `SocketImpl` states will match, i.e., `SOCKET_CREATED`. One peculiar detail retained from the old code is that `InterruptedIOException` is causing a socket close *iff* we are in an interrupted vhtread. (Guess: To ensure resources within a vthread task scope is released in tandem with the completion of the scope?) I don't know why other `InterruptedIOException` cases are left out. Before "8284161: Implementation of Virtual Threads (Preview)" (9583e365), `connect()` failures were getting propagated untouched. 8284161 added the logic to throw `SocketException("Closed by interrupt")` *and* close the socket if `InterruptedIOException` is caught in an interrupted vthread. Judging from the last state of the `Socket#connect()` javadoc, I find it very difficult to wrap ones mind around in which cases the socket will be closed. As a user, I'd be in favor of a simpler approach – e.g., `try { socketImpl.connect(); } catch (Exception e) { closeQuietly(e); throw e }` – at the cost of incorporating a backward incompatible behavioral change. I would appreciate your advice on how shall we proceed further. ------------- Commit messages: - Merge remote-tracking branch 'upstream/master' into pr/8343791 - Merge remote-tracking branch 'origin/master' into pr/8343791 - Fix Javadoc for `connect(SocketAddress)` - Improve Javadoc per dfuchs - Improve Javadoc - Test `bind()` failures in ctor - Merge remote-tracking branch 'upstream/master' into pr/8343791 - Fix javadoc on `InterruptedIOException` - Apply review suggestions - Merge branch 'master' into pr/8343791 - ... and 48 more: https://git.openjdk.org/jdk/compare/ff12ff53...512e1fed Changes: https://git.openjdk.org/jdk/pull/22160/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=22160&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8343791 Stats: 527 lines in 3 files changed: 516 ins; 3 del; 8 mod Patch: https://git.openjdk.org/jdk/pull/22160.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/22160/head:pull/22160 PR: https://git.openjdk.org/jdk/pull/22160