Check for closed sockets before attempting a rpc

Ensure that the socket we've selected has been read from within a
second.  If it hasn't, check if it's closed by polling for readability
and if that works, MSG_PEEK'ing a single byte.  If we get eof, or an
error, we can assume it's broken.  This lets us avoid a large class of
transient network failures.
I'm not an anti-goto zealot for C, but I sort of get a little leery about backward jumps like this, especially when it looks like doing this with a while loop would be no more difficult.