#include "Webserv.hpp" #define MAX_EVENTS 42 // arbitrary #define TIMEOUT 3000 void Webserv::run() { std::cerr << "Server started\n"; struct epoll_event events[MAX_EVENTS]; int nfds; int i; int count_loop = 0; g_run = true; while (g_run) { std::cerr << ++count_loop << "----loop epoll()\n"; nfds = ::epoll_wait(_epfd, events, MAX_EVENTS, TIMEOUT); if (nfds == -1) { std::perror("err epoll_wait()"); throw std::runtime_error("Epoll wait"); } else if (nfds == 0) { if (!_clients.empty()) { std::cerr << "Timeout " << TIMEOUT << "ms\n"; _close_all_clients(); } } i = 0; while (i < nfds) { // if ((events[i].data.u32 == SERVER_FD) && (events[i].events & EPOLLIN)) // Dont work, see "SERVER_FD" define if ((events[i].data.fd == _socket_fd) && (events[i].events & EPOLLIN)) _accept_connection(events[i].data.fd); else if (events[i].events & EPOLLIN) _request(static_cast(events[i].data.ptr)); else if (events[i].events & EPOLLOUT) _response(static_cast(events[i].data.ptr)); ++i; if (!g_run) break; } } }