body write to CGI now monitored by epoll

+ kermit.jpg :)
This commit is contained in:
lperrey
2022-08-17 23:42:12 +02:00
parent 2613ca2e1a
commit b34e49311b
13 changed files with 302 additions and 193 deletions

View File

@@ -13,6 +13,7 @@ void Webserv::_close_client(int fd)
std::cerr << "close fd " << fd << "\n";
if (::close(fd) == -1)
std::perror("err close()");
_close_client_cgi_pipes(&(*it));
_clients.erase(it);
break;
}
@@ -20,6 +21,22 @@ void Webserv::_close_client(int fd)
}
}
void Webserv::_close_client_cgi_pipes(Client *client)
{
if (client->cgi_state)
{
std::cerr << "close cgi-pipes" << "\n";
if (::close(client->cgi_pipe_w_to_child) == -1)
std::perror("err close()");
if (::close(client->cgi_pipe_r_from_child) == -1)
std::perror("err close()");
if (::close(client->cgi_pipe_w_to_parent) == -1)
std::perror("err close()");
if (::close(client->cgi_pipe_r_from_parent) == -1)
std::perror("err close()");
}
}
void Webserv::_close_all_clients()
{
_close_all_clients_fd();
@@ -28,7 +45,7 @@ void Webserv::_close_all_clients()
void Webserv::_close_all_clients_fd()
{
_close_all_clients_cgi_fd();
_close_all_clients_cgi_pipes();
std::vector<Client>::iterator it = _clients.begin();
std::vector<Client>::iterator it_end = _clients.end();
while (it != it_end)
@@ -41,19 +58,14 @@ void Webserv::_close_all_clients_fd()
}
}
void Webserv::_close_all_clients_cgi_fd()
void Webserv::_close_all_clients_cgi_pipes()
{
std::vector<Client>::iterator it = _clients.begin();
std::vector<Client>::iterator it_end = _clients.end();
while (it != it_end)
{
// _epoll_update(_clients.back().fd, 0, EPOLL_CTL_DEL); // normalement superflu, DEBUG
if (it->cgi_pipe_rfd)
{
std::cerr << "close cgi-fd " << it->cgi_pipe_rfd << "\n";
if (::close(it->cgi_pipe_rfd) == -1)
std::perror("err close()");
}
_close_client_cgi_pipes(&(*it));
++it;
}
}