#include "Webserv.hpp" void Webserv::_accept_connection(listen_socket &lsocket) { struct sockaddr_in addr; socklen_t addr_len; int accepted_fd; std::map infos; std::cerr << family << "| " << " accept() socket (" << lsocket.fd << ")\n"; addr_len = sizeof addr; accepted_fd = ::accept(lsocket.fd, (sockaddr*)&addr, &addr_len); if (accepted_fd == -1) { std::perror("err accept()"); if (g_last_signal) _handle_last_signal(); return ; } if (::fcntl(accepted_fd, F_SETFL, O_NONBLOCK) == -1) { std::perror("err fcntl()"); if (::close(accepted_fd) == -1) std::perror("err close()"); } infos = _extract_infos(addr); Client new_client(accepted_fd, &lsocket, infos["port"], infos["ip"]); _clients.push_back(new_client); _epoll_update(accepted_fd, EPOLLIN, EPOLL_CTL_ADD); } std::map Webserv::_extract_infos(struct sockaddr_in addr) { struct in_addr ip_conversion; std::map infos; infos["port"] = ::itos( addr.sin_port ); ip_conversion.s_addr = addr.sin_addr.s_addr; infos["ip"] = inet_ntoa( ip_conversion ); return infos; }