From c8d82c92a116f6db0fc67721abec1ba54e6382da Mon Sep 17 00:00:00 2001 From: 3lswear Date: Sun, 27 Feb 2022 16:19:41 +0300 Subject: [PATCH] feat: don't bind twice on same port --- src/Server/Server.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/Server/Server.cpp b/src/Server/Server.cpp index e43bf36..7ae4f32 100644 --- a/src/Server/Server.cpp +++ b/src/Server/Server.cpp @@ -194,18 +194,28 @@ void Server::setup_server_socks(std::map &configurations_map) it != _configs.end(); ++it) { ServerConfig *config = *it; - Socket server_sock(AF_INET, SOCK_STREAM, 0, config->getPort(), config->getHost()); + std::map::iterator sock_it; + + for (sock_it = configurations_map.begin(); + sock_it != configurations_map.end(); ++sock_it) + { + if ((config->getPort() == sock_it->second.port) && (config->getHost() == sock_it->second.ip)) + { + break; + } + } + if (sock_it != configurations_map.end()) + continue; + Socket server_sock(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0, config->getPort(), config->getHost()); if (server_sock.init(MAX_CLIENT) >= 0) { - setNonBlock(server_sock.getFd()); /* configurations_map[server_sock.getSocketFd()] = server_sock; */ configurations_map.insert(std::make_pair(server_sock.getFd(), server_sock)); DBOUT << YELLO << "adding server_sock..." << ENDL; add_to_epoll_list(server_sock.getFd(), server_events); - std::cerr << GREEN - << config->getServerName() - << " started on " + std::cerr << getDebugTime() << GREEN + << " listening on " << config->getHost() << ":" << config->getPort() @@ -213,7 +223,7 @@ void Server::setup_server_socks(std::map &configurations_map) } else { - std::cerr << RED + std::cerr << getDebugTime() << FAIL << config->getServerName() << " failed to bind to " << config->getHost()