46 lines
1.2 KiB
C++
46 lines
1.2 KiB
C++
|
|
#include "Webserv.hpp"
|
|
|
|
void Webserv::init_virtual_servers() // ADD config param
|
|
{
|
|
_socket_fd = ::socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0); // (SOCK_CLOEXEC) for CGI fork ?
|
|
if (_socket_fd == -1)
|
|
{
|
|
std::perror("err socket()");
|
|
throw std::runtime_error("Socket init");
|
|
}
|
|
|
|
_bind(_socket_fd, 4040);
|
|
_listen(_socket_fd, 512); // 512 arbitrary
|
|
|
|
if (_epoll_update(_socket_fd, EPOLLIN, EPOLL_CTL_ADD) == -1)
|
|
throw std::runtime_error("Socket init");
|
|
}
|
|
|
|
void Webserv::_bind(int socket_fd, in_port_t port)
|
|
{
|
|
// cast invalid ? how to ?
|
|
// const struct sockaddr* cast_test = static_cast<const struct sockaddr*>(addr);
|
|
|
|
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 = ::htonl(INADDR_ANY); // htonl useless with 0 value (INADDR_ANY) ?
|
|
|
|
if (::bind(socket_fd, (const sockaddr*)&addr, sizeof addr) == -1)
|
|
{
|
|
std::perror("err bind()");
|
|
throw std::runtime_error("Socket bind");
|
|
}
|
|
}
|
|
|
|
void Webserv::_listen(int socket_fd, unsigned int max_connections)
|
|
{
|
|
if (::listen(socket_fd, max_connections) == -1)
|
|
{
|
|
std::perror("err listen()");
|
|
throw std::runtime_error("Socket listen");
|
|
}
|
|
}
|