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

Reply via email to