From e0c0484b60391297b868cff136effa053c357f28 Mon Sep 17 00:00:00 2001 From: 3lswear Date: Sat, 5 Feb 2022 16:47:42 +0300 Subject: [PATCH] feat: delete when empty --- src/Server/Server.cpp | 26 +++++++++++++++++--------- src/Server/Server.hpp | 1 + 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/Server/Server.cpp b/src/Server/Server.cpp index 3a64e1e..fa1898b 100644 --- a/src/Server/Server.cpp +++ b/src/Server/Server.cpp @@ -114,6 +114,20 @@ void Server::readSocket(Client &client, int fd) DBOUT << BLUE << "status is " << Response::getReasonPhrase(status) << RESET << std::endl; bzero(buf, BUFFSIZE); } +int Server::delete_client(std::map &client_map, int fd) +{ + int ret; + ret = epoll_ctl(_epoll_fd, EPOLL_CTL_DEL, fd, NULL); + close(fd); + client_map[fd]->clear(); + delete (client_map[fd]); + client_map.erase(fd); + DBOUT << RED << + "deleting client " + << fd + << ENDL; + return (ret); +} void Server::setupConfig(void) { @@ -202,6 +216,8 @@ void Server::start(void) assert( epoll_ctl(_epoll_fd, EPOLL_CTL_MOD, fd, &ev) == 0); DBOUT << GREEN << "rearmed to EPOLLOUT" << ENDL; } + if (client_map[fd]->isEmpty()) + delete_client(client_map, fd); } else if (events & EPOLLOUT) { @@ -210,15 +226,7 @@ void Server::start(void) sendData(*client_map[fd], fd); if (client_map[fd]->allSended()) { - epoll_ctl(_epoll_fd, EPOLL_CTL_DEL, fd, NULL); - close(fd); - client_map[fd]->clear(); - delete (client_map[fd]); - client_map.erase(fd); - DBOUT << RED << - "deleting client " - << fd - << ENDL; + delete_client(client_map, fd); } } } diff --git a/src/Server/Server.hpp b/src/Server/Server.hpp index 0c2ebc3..3a29ec6 100644 --- a/src/Server/Server.hpp +++ b/src/Server/Server.hpp @@ -32,6 +32,7 @@ class Server void setNonBlock(int fd); void sendData(Client &client, int fd); void readSocket(Client &client, int fd); + int delete_client(std::map &map, int fd); enum e_req_status {