/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* Server.cpp :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: iherman- 65535) throw std::runtime_error("Invalid port"); if (password_.empty()) throw std::runtime_error("Empty password"); serverSocket_ = socket(AF_INET, SOCK_STREAM, 0); if (serverSocket_ < 0) throw std::runtime_error("Failed to create socket"); struct sockaddr_in addr; std::memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(port_); addr.sin_addr.s_addr = INADDR_ANY; if (bind(serverSocket_, (struct sockaddr*)&addr, sizeof(addr))) throw std::runtime_error("Failed to bind"); if (listen(serverSocket_, kConnectionQueueLimit)) throw std::runtime_error("Failed to listen"); std::cout << "Server port: " << port_ << "\nServer Password: " << password_ << std::endl; } Server::~Server() { close(serverSocket_); } Server &Server::operator=(const Server& other) { if (this != &other) { port_ = other.port_; serverSocket_ = other.serverSocket_; password_ = other.password_; } return *this; } void Server::run() { const std::size_t kBufferSize = 1024; char buffer[kBufferSize] = {0}; struct sockaddr_in client_addr; socklen_t client_addr_size = 0; int clientSocket = accept(serverSocket_, (struct sockaddr*)&client_addr, &client_addr_size); std::size_t recv_amount = 0; while (true) { recv_amount += recv(clientSocket, buffer, kBufferSize, 0); if (buffer[recv_amount - 1] == '\n') break ; } std::string to_send(buffer); to_send = "Server received: " + to_send; send(clientSocket, to_send.c_str(), to_send.size(), 0); close(clientSocket); }