Server::Server()
{
- epoll_fd = epoll_create(1024); // Size argument is ignored.
+ epoll_fd = epoll_create1(EPOLL_CLOEXEC);
if (epoll_fd == -1) {
log_perror("epoll_fd");
exit(1);
Server::~Server()
{
safe_close(epoll_fd);
+
+ // We're going to die soon anyway, but clean this up to keep leak checking happy.
+ for (const auto &acceptor_and_context : tls_server_contexts) {
+ tls_destroy_context(acceptor_and_context.second);
+ }
}
vector<ClientStats> Server::get_client_stats() const
assert(stream_index >= 0 && stream_index < ssize_t(streams.size()));
streams[stream_index]->set_header(http_header, stream_header);
}
+
+void Server::set_unavailable(int stream_index)
+{
+ lock_guard<mutex> lock(mu);
+ assert(stream_index >= 0 && stream_index < ssize_t(streams.size()));
+ streams[stream_index]->set_unavailable();
+}
void Server::set_pacing_rate(int stream_index, uint32_t pacing_rate)
{
}
if (client->stream_pos_end == Client::STREAM_POS_NO_END) {
- if (stream->http_header.empty()) {
+ if (stream->unavailable) {
return 503; // Service unavailable.
}