What do you mean by further reads? Is it `alloc_cb`, `alloc_cb`, `read_cb`, `read_cb` ? I'm not sure if that still applies to this code since `uv_run` is now called with `UV_RUN_ONCE`. Theoretically it should stop the loop after the first `uv_poll_t` event(unless a single `uv_poll_t` event can trigger two `alloc_cb` calls on windows).

Your'e right about the unexpected error though, perhaps setting `reading=false` before returning `read_cb` would fix it? If so then `io_poll` would return `kPollNone` to the caller. Another option is setting `eof` on unexpected errors. It would make vim exit by calling `read_error_exit` which would be a sane action