Integrated: 8372958: SocketInputStream.read throws SocketException instead of returning -1 when input shutdown

Alan Bateman alanb at openjdk.org
Wed Dec 3 13:07:14 UTC 2025


On Wed, 3 Dec 2025 07:47:40 GMT, Alan Bateman <alanb at openjdk.org> wrote:

> Invoking Socket.shutdownInput at around the same time that another thread attempts to read or is blocked in read on the same Socket has always been problematic on Windows. For virtual threads, the read may fail with a SocketException exception like "A request to send or receive data was disallowed because the socket had already been shut down in that direction with a previous shutdown call". The change proposed here to change the SocketImpl to handle the async shutdownInput and cause read to return -1. 
> 
> Tests for async shutdownInput and shutdownOutput are added to BlockingSocketsOps. Some minor drive by clean-up to use a value source for the tests that exercise both untimed and timed cases. Similar cleanup in BlockingChannelOps as it tests the socket adapters doing both untimed and timed reads. The existing test for async shutdown with platform threads is migrated to JUnit as part of the change.
> 
> Testing: tier1 + tier2, test repeat runs of the modified tests to ensure they are stable.

This pull request has now been integrated.

Changeset: afb6a0c2
Author:    Alan Bateman <alanb at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/afb6a0c2fecdb2114715290d5d463c9dccf93c28
Stats:     328 lines in 4 files changed: 98 ins; 160 del; 70 mod

8372958: SocketInputStream.read throws SocketException instead of returning -1 when input shutdown

Reviewed-by: djelinski, michaelm

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

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


More information about the nio-dev mailing list