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.