Hola, buenas tardes. Espero que estén bien.
Realizando el ejercicio 5 del práctico 3 me surgió una duda que es más conceptual que otra cosa. Resulta que en este ejercicio hay que enviar datos a los mismos dos servidores, en distintos hilos de ejecución, que son de vida bastante corta, ya que - al menos en mi implementación - es uno por cada solicitud recibida.
Mi duda es si es correcto utilizar dos sockets comunes, uno por cada servidor, para enviar estos datos al servidor de destino. Se crearían en el procedimiento que luego crea los threads, y se pasan como parámetro a la función que se ejecuta en hilos. De esta forma evito crear un (potencialmente gran) número de conexiones TCP que podrían ser en definitiva evitadas.
Tengo entendido que esto introduce problemas al estar más de un proceso enviando datos al mismo socket, por lo que introducí un semáforo de mutuo-exclusión para el envío del mensaje a socket.send() (haciendo P antes de iniciar el envío y V al finalizarlo, utilizando la sintaxis que vimos en Sistemas Operativos) para evitar potenciales problemas de concurrencia. Quería saber también si esta solución se considera correcta, o es mejor utilizar uno por cada conexión y así este problema no ocurre.
Jorge en un mensaje al foro de hace un tiempo decía que "Si tenés dos [sockets] leyendo o dos escribiendo probablemente haya un problema en tu diseño.”. Sin embargo considero que esta forma de implementarlo, cuidando la concurrencia, podría llegar a ser correcta. Pero por supuesto, me gustaría confirmarlo.
Muchas gracias!
Santiago