diff --git a/includes/server.hpp b/includes/server.hpp index be730dd..8ed5866 100644 --- a/includes/server.hpp +++ b/includes/server.hpp @@ -6,7 +6,7 @@ /* By: vvaas +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/21 09:12:28 by maldavid #+# #+# */ -/* Updated: 2024/01/22 12:16:31 by maldavid ### ########.fr */ +/* Updated: 2024/01/22 17:00:02 by maldavid ### ########.fr */ /* */ /******************************************************************************/ @@ -27,7 +27,10 @@ namespace irc { public: Server(int port, const std::string& password); + + inline void closeMainSocket() { close(_main_socket); } void wait(); + ~Server(); private: diff --git a/srcs/main.cpp b/srcs/main.cpp index 8a616c1..e0bc160 100644 --- a/srcs/main.cpp +++ b/srcs/main.cpp @@ -6,7 +6,7 @@ /* By: vvaas +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/20 09:27:04 by maldavid #+# #+# */ -/* Updated: 2024/01/22 09:30:16 by maldavid ### ########.fr */ +/* Updated: 2024/01/22 17:04:37 by maldavid ### ########.fr */ /* */ /******************************************************************************/ @@ -16,6 +16,17 @@ #include #include #include +#include + +static unstd::SharedPtr server_ref; + +void signalsHandler(int foo) +{ + (void)foo; + if(server_ref) + return; + server_ref->closeMainSocket(); +} int main(int ac, char** av) { @@ -32,8 +43,12 @@ int main(int ac, char** av) if(errno == ERANGE || *end != 0 || port < 0 || port > 0xFFFF || std::strlen(av[1]) == 0) irc::logs::report(irc::log_fatal_error, "invalid port"); - irc::Server server(port, av[2]); - server.wait(); + unstd::SharedPtr serv(new irc::Server(port, av[2])); + server_ref = serv; + signal(SIGINT, signalsHandler); + signal(SIGQUIT, signalsHandler); + serv->wait(); + serv->closeMainSocket(); return 0; } diff --git a/srcs/server.cpp b/srcs/server.cpp index 47bd08a..f87a602 100644 --- a/srcs/server.cpp +++ b/srcs/server.cpp @@ -6,7 +6,7 @@ /* By: vvaas +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/21 09:31:17 by maldavid #+# #+# */ -/* Updated: 2024/01/22 16:44:54 by maldavid ### ########.fr */ +/* Updated: 2024/01/22 17:00:42 by maldavid ### ########.fr */ /* */ /******************************************************************************/ @@ -22,24 +22,13 @@ #include #include #include -#include namespace irc { - static bool __quit_required = false; - - static void signalsHandler(int foo) - { - (void)foo; - __quit_required = true; - } - Server::Server(int port, const std::string& password) : _s_len(sizeof(_s_data)), _password(password), _port(port), _active(true) { std::memset(&_s_data, 0, sizeof(sockaddr)); initSocket(); - signal(SIGINT, signalsHandler); - signal(SIGQUIT, signalsHandler); } void Server::initSocketData() @@ -103,7 +92,7 @@ namespace irc int i = 0; socklen_t len = sizeof(sockaddr_in); - while(_active && !__quit_required) + while(_active) { FD_ZERO(&_fd_set); FD_SET(_main_socket, &_fd_set);