Why not just use `read_nonblock` instead of checking `can_read?` and then reading?