]> git.llucax.com Git - z.facultad/75.74/practicos.git/blobdiff - practicas/pipi/src/dns.cpp
Cosas de Distribuidos I.
[z.facultad/75.74/practicos.git] / practicas / pipi / src / dns.cpp
index f0846d4fa1f6eb815201d643ea2920312c13ddd2..eb7e70695fd4069fce59a62bc849f747dd34b2d1 100644 (file)
@@ -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;