구현 | Select
void
ServerManager::runServer()
{
signal(SIGINT, changeSignal);
timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 0;
g_live = true;
resetMaxFd();
while (g_live)
{
int cnt;
fdCopy(ALL_SET);
if ((cnt = select(this->m_max_fd + 1, &this->m_read_copy_set, &this->m_write_copy_set, \
NULL, &timeout)) == -1)
{
perror("Server select error: ");
ft::log(ServerManager::log_fd, "[Failed][Function]Select function failed(return -1)");
throw std::runtime_error("select error");
}
else if (cnt == 0)
continue ;
writeServerHealthLog();
for (std::vector<Server>::iterator it = m_servers.begin() ; it != m_servers.end() ; ++it)
{
it->run();
closeOldConnection(it);
}
resetMaxFd();
}
exitServer("server exited.\n");
}Last updated
Was this helpful?