39 lines
1.1 KiB
C++
39 lines
1.1 KiB
C++
#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);
|
|
} |