+ // Process a client; read and write data as far as we can.
+ // After this call, one of these four is true:
+ //
+ // 1. The socket is closed, and the client deleted.
+ // 2. We are still waiting for more data from the client.
+ // 3. We've sent all the data we have to the client,
+ // and put it in <sleeping_clients>.
+ // 4. The socket buffer is full (which means we still have
+ // data outstanding).
+ //
+ // For #2, we listen for EPOLLIN events. For #3 and #4, we listen
+ // for EPOLLOUT in edge-triggered mode; it will never fire for #3,
+ // but it's cheaper than taking it in and out all the time.