sockets process tcp fork port

sockets - Cómo se maneja la conexión de socket en un proceso bifurcado



process tcp (2)

Tengo un programa que sirve como un servidor TCP que escucha el puerto 5000, por ejemplo.

Ahora quiero ejecutar otro proceso de línea de comandos para ejecutarlo en paralelo con este servidor. Sé que la forma correcta de hacerlo es bifurcar el servidor, que llamar "exec" ...

Mi pregunta es, ¿el proceso hijo también es "propietario" de este puerto 5000? Si deseo liberar este puerto 5000, ¿tengo que matar tanto el proceso principal como el secundario?

Solo tengo curiosidad por saber cómo se maneja esta conexión en el bifurcación.


  1. Primero, accept() la conexión entrante. El proceso de aceptación ahora tiene un control para el socket de escucha y el socket recientemente aceptado.
  2. Tenedor y:
    • En el niño:
      1. Cierre la toma de audio.
      2. Haz cosas con el socket aceptado.
    • En el padre:
      1. Cierre el conector aceptado.
      2. Reanudar el ciclo de aceptación.

Los diversos recursos de socket se reclamarán cuando se cierren todas las referencias al identificador. Si un proceso finaliza, todos sus identificadores se cierran implícitamente. Por lo tanto, si un niño cierra el identificador hereda el socket de escucha, el único identificador restante para ese socket existe en el padre. Luego, el socket de escucha se reclamará cuando el padre termine, o cierra este handle explícitamente.


Sí, lo hace
Cada vez que se crea un proceso secundario, obtiene una copia de la tabla de descriptores de archivos del proceso principal. Y hay un recuento de referencias correspondiente a cada descriptor de archivo, es decir, el número de procesos que actualmente acceden al archivo / socket. Entonces, si un socket está abierto en el proceso maestro y se crea un proceso hijo, el recuento de referencias se incrementa, ya que ahora también está abierto en el proceso secundario, y cuando se cierra en cualquiera de los procesos, disminuye. Un socket finalmente se cierra cuando el recuento de referencia llega a cero.