client: poll for read readiness instead of SO_RCVTIMEO
The TLS read path goes through std.crypto.tls, whose reader treats a socket
EAGAIN (produced by SO_RCVTIMEO on timeout) as a programmer bug and panics in
debug builds. Poll the fd for readiness instead, so a read timeout surfaces as
error.WouldBlock without ever issuing a read that can EAGAIN.