I think I know what's happening.
The closing of the InputStream is hooked into the closing of the
channel, which typically happens once input-stream->channel has
exhausted the InputStream. However, the channel is also closed if the
client disconnects, which can happen mid-read. In this case, the
channel would be closed, which would close the InputStream, which
would then cause .read to throw an exception.
That would mean these exceptions aren't a symptom of a problem, since
this is just a reaction to the client unexpected disconnecting. This
would make sense, given how infrequent you've said these errors are.
Spurious exceptions are a problem, so I'll definitely be fixing this,
but I don't think you need to worry about them in the meantime.
Thanks for the report. Let me know if I can help you with anything else.
Zach