Introduce IOException subclass for ECONNRESET
David M. Lloyd
david.lloyd at redhat.com
Tue Oct 4 12:52:06 UTC 2016
On 10/04/2016 03:58 AM, Langer, Christoph wrote:
> Hi,
>
> I think I would also support replacing sun.net.ConnectionResetException with a publicly available java.net.ConnectionResetException that subclasses java.net.SocketException. But, as Chris mentions. a usage example would be helpful.
At present you're going to be hard-pressed to find exiting code that
detects a connection reset IOException. The reason is that, while you
*can* search for "Connection reset by peer" in the exception message,
that text varies by platform and, more importantly, by locale. So it is
essentially impossible to detect reliably.
But Norman's use case is dead on: a connection reset happens under
common circumstances. In particular, when a TCP socket is closed by the
peer before the peer has read all pending data, an RST is returned.
This happens very often - when a peer process is terminated for example,
or the peer encounters an unrelated exception and terminates the
connection abruptly, both of which happen very, very commonly in
networked applications. For servers the choice today is to fill the log
with meaningless exception traces or lose potentially more serious
problems (EIO for example is something that almost always indicates Bad
Things).
I also support this proposal.
>> -----Original Message-----
>> From: net-dev [mailto:net-dev-bounces at openjdk.java.net] On Behalf Of Chris
>> Hegarty
>> Sent: Montag, 12. September 2016 17:07
>> To: Florian Weimer <fweimer at redhat.com>; Norman Maurer
>> <norman.maurer at googlemail.com>; net-dev at openjdk.java.net
>> Subject: Re: Introduce IOException subclass for ECONNRESET
>>
>> On 12/09/16 14:50, Florian Weimer wrote:
>>> On 08/23/2016 09:40 AM, Norman Maurer wrote:
>>>> Hi all,
>>>>
>>>> I first asked this on nio-dev[0] but was asked to move this over to here:
>>>>
>>>> I wonder if it would be possible to add a new IOException sub-class
>>>> for ECONNRESET. Often you receive these errors if a remote peer closed
>>>> the connection and you try to read from it while using NIO. This is
>>>> very often not really something that concerns people and can just be
>>>> handled the same as a “normal close”.
>>
>> So what are the other cases, where ECONNRESET may occur? What is
>> equivalent on non-Unix platforms, Windows for example?
>>
>> >> At the moment the only way to
>>>> detect this is to inspect the IOException message which is really
>>>> hacky.
>>
>> Do you have examples of code that does this today?
>>
>>>> I wonder if we could not add a special IOException sub-class
>>>> for this. Something like:
>>>>
>>>> ConnectionResetException extends IOException {
>>>> }
>>>
>>> Shouldn't it be a subclass of SocketException?
>>
>> I think it would have to be a subclass of SocketException too, for
>> compatibility at least, since that is the type that is thrown
>> today.
>>
>> sun.net.ConnectionResetException exists today, but I don't think
>> that it ever finds its way outside of the implementation. And is
>> of course not part of Java SE.
>>
>> -Chris.
>>
>
--
- DML
More information about the net-dev
mailing list