Do sockets continue to be flagged as readable to indicate TCP errors after the peer gracefully closed the connection?
When using select() (or epoll), errors are indicated by flagging the socket readable, then the recv() call will fail and indicates the error.