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