Ok, yeah I also did a quick elsewhere: it looks like `IOExceptions` are triggered if the stream is abruptly closed on our side (among other unexpected errors), but `EOFExceptions` are triggered if the stream is closed on their side.