8199329: Remove code that attempts to read bytes after connection reset reported

Chris Hegarty chris.hegarty at oracle.com
Wed Mar 14 15:29:22 UTC 2018



On 14/03/18 14: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/

Looks fine.

Curiously, I cannot find a test that checks the
read-after-reset-throws-SE, but your changes look good.

-Chris.


More information about the net-dev mailing list