From e46db9df5732aecd77ebd3f4719116e485f9640e Mon Sep 17 00:00:00 2001 From: aortigos Date: Wed, 15 Apr 2026 00:06:09 +0200 Subject: [PATCH] Implemented poll function for system --- Server/Server.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++----- Server/Server.hpp | 2 ++ 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/Server/Server.cpp b/Server/Server.cpp index 6c51d7a..8377edc 100644 --- a/Server/Server.cpp +++ b/Server/Server.cpp @@ -44,12 +44,49 @@ int Server::run() listen(server_fd, 1); std::cout << "Esperando conexion" << std::endl; - int client_fd = accept(server_fd, NULL, NULL); - std::cout << "Cliente conectado" << std::endl; + std::vector fds; - char buf[512] = {0}; - recv(client_fd, buf, sizeof(buf), 0); - std::cout << "Mensaje: " << buf << std::endl; + pollfd server_pfd; + server_pfd.fd = server_fd; + server_pfd.events = POLLIN; + server_pfd.revents = 0; + fds.push_back(server_pfd); + + while (true) + { + poll(fds.data(), fds.size(), -1); + + for(unsigned int i = 0; i < fds.size(); i++) + { + if (!(fds[i].revents & POLLIN)) + continue ; + + if (fds[i].fd == server_fd) + { + int client_fd = accept(server_fd, NULL, NULL); + std::cout << "Cliente conectado (fd=" << client_fd << ")\n"; + + pollfd client_pfd; + client_pfd.fd = client_fd; + client_pfd.events = POLLIN; + client_pfd.revents = 0; + fds.push_back(client_pfd); + } else { + char buf[512] = {0}; + ssize_t n = recv(fds[i].fd, buf, sizeof(buf) - 1, 0); + if(n <= 0) + { + std::cout << "Cliente (fd=" << fds[i].fd << ") desconectado\n"; + close(fds[i].fd); + fds.erase(fds.begin() + i); + i--; + } else { + std::cout << "Mensaje de fd=" << fds[i].fd << ": " << buf; + } + } + } + + } close(client_fd); close(server_fd); diff --git a/Server/Server.hpp b/Server/Server.hpp index b97a39e..d310323 100644 --- a/Server/Server.hpp +++ b/Server/Server.hpp @@ -18,6 +18,8 @@ # include # include # include +# include +# include class Server {