- for (unsigned i = 0; i < sleeping_clients.size(); ++i) {
- epoll_event ev;
- ev.events = EPOLLOUT | EPOLLRDHUP;
- ev.data.u64 = 0; // Keep Valgrind happy.
- ev.data.fd = sleeping_clients[i];
- if (epoll_ctl(epoll_fd, EPOLL_CTL_MOD, sleeping_clients[i], &ev) == -1) {
- perror("epoll_ctl(EPOLL_CTL_MOD)");
- exit(1);
- }
+ if (epoll_ctl(epoll_fd, EPOLL_CTL_DEL, client->sock, NULL) == -1) {
+ perror("epoll_ctl(EPOLL_CTL_DEL)");
+ exit(1);
+ }
+
+ // 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());