mirror of
https://github.com/3lswear/webserv.git
synced 2025-10-29 13:27:59 +03:00
feat(core): open sockets on multiple servers from configurations
This commit is contained in:
@@ -162,7 +162,7 @@ void Server::start(void)
|
|||||||
{
|
{
|
||||||
/* Socket server_sock(AF_INET, SOCK_STREAM, 0, _port, "127.0.0.1"); */
|
/* Socket server_sock(AF_INET, SOCK_STREAM, 0, _port, "127.0.0.1"); */
|
||||||
std::map<int, Client*> client_map;
|
std::map<int, Client*> client_map;
|
||||||
std::map<int, struct serverListen> configurations_map;
|
std::map<int, Socket> configurations_map;
|
||||||
int fd;
|
int fd;
|
||||||
int ready_num = 0;
|
int ready_num = 0;
|
||||||
|
|
||||||
@@ -179,12 +179,9 @@ void Server::start(void)
|
|||||||
Socket server_sock(AF_INET, SOCK_STREAM, 0, config->getPort(), config->getHost());
|
Socket server_sock(AF_INET, SOCK_STREAM, 0, config->getPort(), config->getHost());
|
||||||
if (server_sock.init(MAX_CLIENT) >= 0)
|
if (server_sock.init(MAX_CLIENT) >= 0)
|
||||||
{
|
{
|
||||||
struct serverListen listenparams;
|
|
||||||
listenparams.ip = config->getHost();
|
|
||||||
listenparams.port = config->getPort();
|
|
||||||
|
|
||||||
setNonBlock(server_sock.getSocketFd());
|
setNonBlock(server_sock.getSocketFd());
|
||||||
configurations_map[server_sock.getSocketFd()] = listenparams;
|
/* configurations_map[server_sock.getSocketFd()] = server_sock; */
|
||||||
|
configurations_map.insert(std::make_pair(server_sock.getSocketFd(), server_sock));
|
||||||
DBOUT << YELLO << "adding server_sock..." << ENDL;
|
DBOUT << YELLO << "adding server_sock..." << ENDL;
|
||||||
add_to_epoll_list(server_sock.getSocketFd(), server_events);
|
add_to_epoll_list(server_sock.getSocketFd(), server_events);
|
||||||
|
|
||||||
@@ -218,7 +215,7 @@ void Server::start(void)
|
|||||||
{
|
{
|
||||||
|
|
||||||
ready_num = epoll_wait(_epoll_fd, _events, MAX_CLIENT, 5000);
|
ready_num = epoll_wait(_epoll_fd, _events, MAX_CLIENT, 5000);
|
||||||
/* DBOUT << TURQ << "ready_num " << ready_num << ENDL; */
|
DBOUT << TURQ << "ready_num " << ready_num << ENDL;
|
||||||
|
|
||||||
if (ready_num < 0)
|
if (ready_num < 0)
|
||||||
throw std::logic_error("epoll_ret");
|
throw std::logic_error("epoll_ret");
|
||||||
@@ -226,14 +223,17 @@ void Server::start(void)
|
|||||||
{
|
{
|
||||||
fd = _events[i].data.fd;
|
fd = _events[i].data.fd;
|
||||||
unsigned int events = _events[i].events;
|
unsigned int events = _events[i].events;
|
||||||
|
std::map<int, Socket>::iterator sock_it;
|
||||||
|
|
||||||
/* DBOUT << "FD is " << fd << ENDL; */
|
/* DBOUT << "FD is " << fd << ENDL; */
|
||||||
/* print_epoll_events(events); */
|
/* print_epoll_events(events); */
|
||||||
|
|
||||||
if (configurations_map.find(fd) != configurations_map.end())
|
if ((events & EPOLLIN)
|
||||||
|
&& (sock_it = configurations_map.find(fd)) != configurations_map.end())
|
||||||
{
|
{
|
||||||
|
/* = configurations_map.find(fd); */
|
||||||
int client_sock = accept(fd,
|
int client_sock = accept(fd,
|
||||||
configurations_map[fd].getSockaddr(), server_sock.getSocklen());
|
(sock_it->second).getSockaddr(), (sock_it->second).getSocklen());
|
||||||
if (client_sock > 0)
|
if (client_sock > 0)
|
||||||
add_to_epoll_list(client_sock, client_events);
|
add_to_epoll_list(client_sock, client_events);
|
||||||
else
|
else
|
||||||
@@ -274,7 +274,7 @@ void Server::start(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
close(server_sock.getSocketFd());
|
/* close(server_sock.getSocketFd()); */
|
||||||
DBOUT << RED << "end;" << ENDL;
|
DBOUT << RED << "end;" << ENDL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user