8199329: Remove code that attempts to read bytes after connection reset reported
Claes Redestad
claes.redestad at oracle.com
Wed Mar 14 15:02:36 UTC 2018
Looks good to me.
/Claes
On 2018-03-14 15:30, Alan Bateman wrote:
>
> Classic networking has some curious code to deal with connection
> resets. I needed to dig into ancient history to find the issues and
> original motivations.
>
> When a connection reset is reported (usually ECONNRESET) then further
> attempts to read from the socket will typically return -1 (EOF).
> Classic networking papers over this so that further attempts with the
> socket APIs to read bytes will continue to throw SocketException
> "connection reset". Furthermore, it allows for cases where the
> platform can read bytes from the socket buffer after ECONNRESET has
> been reported. None of the main stream platforms do this and it's hard
> to imagine anything depending on such unpredictable behavior. I'm
> running into this odd code as part of cleanup to the read/write code
> paths and reducing them down to a single blocking call.
>
> I would like to remove the legacy/undocumented behavior that attempts
> to read beyond the connection reset. The code to consistently throw
> IOException once ECONNRESET is returned is retained as it's possible
> that code relies on this.
>
> The proposed changes are here:
> http://cr.openjdk.java.net/~alanb/8199329/webrev/
>
> All existing tests pass with these changes.
>
> -Alan
More information about the net-dev
mailing list