+
+ // This client could be sleeping, so we'll need to fix that. (Argh, O(n).)
+ if (client->stream != NULL) {
+ vector<Client *>::iterator new_end =
+ remove(client->stream->sleeping_clients.begin(),
+ client->stream->sleeping_clients.end(),
+ client);
+ client->stream->sleeping_clients.erase(
+ new_end, client->stream->sleeping_clients.end());
+ }
+
+ // Bye-bye!
+ int ret;
+ do {
+ ret = close(client->sock);
+ } while (ret == -1 && errno == EINTR);
+
+ if (ret == -1) {
+ perror("close");
+ }
+
+ clients.erase(client->sock);