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