On 23/01/2019 10:55, Florian Weimer wrote:
:
Sorry, what I meant is that available() says that there are bytes, and
then when you try to read them, you get an exception because they are no
longer there.  I doubt that's the intent behind the
InputStream::available specification, but as I said, it still avoids
blocking, so it may match a literal interpretation.

But presumably this is already the behavior with SocketInputStream?

It's very platform specific as to whether you can read bytes in the socket buffer when a connection reset is reported. This was something we discussed on net-dev last year in the context of other changes to detach the write path from interference due to connection reset. Classic networking has always attempted to mask the differences by remembering the connection reset so that subsequent calls to read work consistently across platforms. There's nothing in the proposed changes that touches or changes the long standing behavior.

As regards reading after available returns a position value then the spec can only says that it doesn't block. It can't guarantee that the read doesn't throw I/O exception. Calling close between available and read is another scenario where read will fail.

-Alan

Reply via email to