X-Git-Url: https://git.llucax.com/z.facultad/75.74/practicos.git/blobdiff_plain/cc20509697bcad0600d4622c275b53ac65445776..f48d95822c7810a45daf26854de7262ccc20a940:/practicas/pipi/src/dns.cpp?ds=sidebyside diff --git a/practicas/pipi/src/dns.cpp b/practicas/pipi/src/dns.cpp index f0846d4..eb7e706 100644 --- a/practicas/pipi/src/dns.cpp +++ b/practicas/pipi/src/dns.cpp @@ -63,31 +63,47 @@ int main(int argc, char* argv[]) perror("fork() send"); return 2; } - if (pid_send) // IPOut + if (pid_send) // Padre { - pid_t pid_fw = fork(); - if (pid_fw == -1) + pid_t pid_recv = fork(); + if (pid_recv == -1) { - perror("fork() forward"); + perror("fork() recv"); return 3; } - if (pid_fw) // Padre (Entrada por teclado) + if (pid_recv) // Padre { - int ret; - send_loop(ns); - kill(pid_send, SIGTERM); - waitpid(pid_send, &ret, 0); - kill(pid_fw, SIGTERM); - waitpid(pid_fw, &ret, 0); - return 0; + pid_t pid_req = fork(); + if (pid_req == -1) + { + perror("fork() req"); + return 3; + } + if (pid_req) // Padre (Entrada por teclado) + { + int ret; + send_loop(ns); + kill(pid_send, SIGTERM); + waitpid(pid_send, &ret, 0); + kill(pid_recv, SIGTERM); + waitpid(pid_recv, &ret, 0); + kill(pid_req, SIGTERM); + waitpid(pid_req, &ret, 0); + return 0; + } + else // Hijo 1 (Proceso de request DNS) + { + ns.req_loop(); + return 0; + } } - else // Hijo 1 (envío del DNS) + else // Hijo 2 (envío del DNS) { ns.send_loop(); return 0; } } - else // Hijo 2 (recepción del DNS) + else // Hijo 3 (recepción del DNS) { ns.recv_loop(); return 0;