Code review updates

These are updates based on your code review so far.  I put them in a branch off of channelwad.
I think you want a `timeoutCh := time.After(timeout)` right above the loop, and to wait for `case <- timeoutCh`; otherwise, the timeout gets reset on every iteration (which in this case means every time we get a `nil` or `io.EOF` error).