#include "Server.hpp" void Server::start(void) { _serverFd = socket(AF_INET, SOCK_STREAM, 0); if (_serverFd == -1) throw std::runtime_error(strerror(errno)); int opt = 1; if (setsockopt(_serverFd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1) { close(_serverFd); throw std::runtime_error(strerror(errno)); } if (fcntl(_serverFd, F_SETFL, O_NONBLOCK) == -1) { close(_serverFd); throw std::runtime_error(strerror(errno)); } struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(_port); addr.sin_addr.s_addr = INADDR_ANY; if (bind(_serverFd, (struct sockaddr *)&addr, sizeof(addr)) == -1) { close(_serverFd); throw std::runtime_error(strerror(errno)); } if (listen(_serverFd, SOMAXCONN) == -1) { close(_serverFd); throw std::runtime_error(strerror(errno)); } struct pollfd pollfd; pollfd.fd = _serverFd; pollfd.events = POLLIN; pollfd.revents = 0; _fds.push_back(pollfd); }