splitted Webserv.cpp
This commit is contained in:
45
srcs/webserv/init.cpp
Normal file
45
srcs/webserv/init.cpp
Normal file
@@ -0,0 +1,45 @@
|
||||
|
||||
#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");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user