epoll_fd = epoll_create(1024); // Size argument is ignored.
if (epoll_fd == -1) {
- perror("epoll_fd");
+ log_perror("epoll_fd");
exit(1);
}
}
} while (ret == -1 && errno == EINTR);
if (ret == -1) {
- perror("close(epoll_fd)");
+ log_perror("close(epoll_fd)");
}
}
continue;
}
if (nfds == -1) {
- perror("epoll_wait");
+ log_perror("epoll_wait");
exit(1);
}
ev.events = EPOLLIN | EPOLLET | EPOLLRDHUP;
ev.data.u64 = reinterpret_cast<uint64_t>(&clients[sock]);
if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, sock, &ev) == -1) {
- perror("epoll_ctl(EPOLL_CTL_ADD)");
+ log_perror("epoll_ctl(EPOLL_CTL_ADD)");
exit(1);
}
ev.data.u64 = 0; // Keep Valgrind happy.
ev.data.u64 = reinterpret_cast<uint64_t>(client_ptr);
if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, client.sock(), &ev) == -1) {
- perror("epoll_ctl(EPOLL_CTL_ADD)");
+ log_perror("epoll_ctl(EPOLL_CTL_ADD)");
exit(1);
}
return;
}
if (ret == -1) {
- perror("read");
+ log_perror("read");
close_client(client);
return;
}
if (ret == -1) {
// Error! Postcondition #1.
- perror("write");
+ log_perror("write");
close_client(client);
return;
}
}
if (ret == -1) {
// Error, close; postcondition #1.
- perror("sendfile");
+ log_perror("sendfile");
close_client(client);
return;
}
}
if (setsockopt(client->sock, SOL_SOCKET, SO_MARK, &client->fwmark, sizeof(client->fwmark)) == -1) {
if (client->fwmark != 0) {
- perror("setsockopt(SO_MARK)");
+ log_perror("setsockopt(SO_MARK)");
}
}
client->request.clear();
ev.data.u64 = reinterpret_cast<uint64_t>(client);
if (epoll_ctl(epoll_fd, EPOLL_CTL_MOD, client->sock, &ev) == -1) {
- perror("epoll_ctl(EPOLL_CTL_MOD)");
+ log_perror("epoll_ctl(EPOLL_CTL_MOD)");
exit(1);
}
}
ev.data.u64 = reinterpret_cast<uint64_t>(client);
if (epoll_ctl(epoll_fd, EPOLL_CTL_MOD, client->sock, &ev) == -1) {
- perror("epoll_ctl(EPOLL_CTL_MOD)");
+ log_perror("epoll_ctl(EPOLL_CTL_MOD)");
exit(1);
}
}
void Server::close_client(Client *client)
{
if (epoll_ctl(epoll_fd, EPOLL_CTL_DEL, client->sock, NULL) == -1) {
- perror("epoll_ctl(EPOLL_CTL_DEL)");
+ log_perror("epoll_ctl(EPOLL_CTL_DEL)");
exit(1);
}
} while (ret == -1 && errno == EINTR);
if (ret == -1) {
- perror("close");
+ log_perror("close");
}
clients.erase(client->sock);