refactor: replace fdToConfig_ with listener_fds_ for improved socket management

This commit is contained in:
Quinten 2025-09-30 18:15:08 +02:00
parent 9320d83378
commit e1acf5b515
2 changed files with 7 additions and 25 deletions

View File

@ -55,7 +55,7 @@ void Server::start()
{
setupServerSocket(*config);
}
if (fdToConfig_.empty())
if (listener_fds_.empty())
{
Log::fatal("No server sockets created.");
throw std::runtime_error("No server sockets created.");
@ -111,7 +111,7 @@ void Server::setupServerSocket(const ServerConfig &config)
addToEpoll(*serverSocket, EPOLLIN);
listeners_.push_back(std::move(serverSocket));
fdToConfig_.insert({server_fd, std::cref(config)});
listener_fds_.insert(server_fd);
Log::info("Server listening on " + host + ":" + std::to_string(port) + "...");
// static_cast<std::string>(config["listen"]) + "...");
}
@ -156,24 +156,6 @@ Client &Server::getClient(int fd) const
throw std::runtime_error("Client not found for fd: " + std::to_string(fd));
}
const ServerConfig &Server::getConfig(const Socket &socket) const
{
Log::trace(LOCATION);
return getConfig(socket.getFd());
}
const ServerConfig &Server::getConfig(int fd) const
{
Log::trace(LOCATION);
auto it = fdToConfig_.find(fd);
if (it != fdToConfig_.end())
{
return (it->second.get());
}
Log::error("Config not found for fd: " + std::to_string(fd));
throw std::runtime_error("Config not found for fd: " + std::to_string(fd));
}
void Server::handleRequest(struct epoll_event *event) const
{
Log::trace(LOCATION);
@ -220,7 +202,7 @@ void Server::eventLoop()
removeFromEpoll(getListener(event.data.fd));
close(event.data.fd);
}
else if (fdToConfig_.contains(event.data.fd))
else if (listener_fds_.contains(event.data.fd))
{
handleConnection(&event);
}

View File

@ -6,10 +6,11 @@
#include <webserv/socket/Socket.hpp> // for Socket
#include <cstdint> // for uint32_t
#include <functional> // for reference_wrapper
#include <memory> // for unique_ptr
#include <unordered_map> // for unordered_map
#include <vector> // for vector
#include <set> // for set
class Client;
class ConfigManager;
@ -42,13 +43,12 @@ class Server
void eventLoop();
Socket &getListener(int fd) const;
Client &getClient(int fd) const;
const ServerConfig &getConfig(int fd) const;
const ServerConfig &getConfig(const Socket &socket) const;
private:
int epoll_fd_;
const ConfigManager &configManager_;
std::vector<std::unique_ptr<Socket>> listeners_;
std::unordered_map<int, std::reference_wrapper<const ServerConfig>> fdToConfig_;
std::set<int> listener_fds_;
std::unordered_map<int, std::unique_ptr<Client>> clients_;
};