RFR: 8189366: SocketInputStream.available() should check for eof

Daniel Fuchs daniel.fuchs at oracle.com
Fri Oct 12 10:26:23 UTC 2018


Hi,

Maybe a more conservative implementation could have been:

    int available = impl.available();
    return eof ? 0 : available;

I almost suggested that yesterday, but I saw that
read() already had a logic similar to what Vyom was
proposing for available:

  146         // EOF already encountered
  147         if (eof) {
  148             return -1;
  149         }

which AFAICT  means that read returns -1 instead of throwing
if the socket is closed and EOF was previously reached.

best regards,

-- daniel

On 12/10/2018 09:55, Chris Hegarty wrote:
> 
> On 12/10/18 08:29, Alan Bateman wrote:
>> On 11/10/2018 09:03, vyom tewari wrote:
>>> Hi Chris,
>>>
>>> Thanks for review, please find the updated 
>>> webrev(http://cr.openjdk.java.net/~vtewari/8189366/webrev0.1/index.html) 
>>> where i included the test.
>> Can you explain the behavior change for the closed socket case? Will 
>> this change mean that available returns 0 when it previously throw 
>> IOException?
> 
> You are correct. This is not intentional, or desirable.
> 
> We should revert the change or add an additional check
> for isClosedOrPending. Since this is already pushed, I
> filed a new JIRA issue to track this.
> 
>    https://bugs.openjdk.java.net/browse/JDK-8212114
> 
> -Chris.
> 



More information about the net-dev mailing list