Pregunta:
¿Cómo reservo una lista de puertos para mis aplicaciones personalizadas?
Para ser específico, el producto que estoy creando tiene muchos procesos y mucha intercomunicación entre ellos.
El problema que tengo es que, de vez en cuando, el sistema operativo me roba los puertos. Es raro, pero sucede.
Esto podría deberse a que una aplicación diferente ha utilizado ":: bind" sin un puerto especificado.
O, a veces, mis propias aplicaciones roban el puerto cuando llamo a ":: connect" con un conector no vinculado. Como se ve en la página del manual:
Si el conector aún no se ha vinculado a una dirección local, connect () lo vinculará a una dirección que, a menos que la familia de direcciones del conector sea AF_UNIX, es una dirección local no utilizada.
Entonces, mi pregunta es, ¿puedo reservar los puertos que necesito para que el sistema operativo no los use? ¿Se puede lograr esto con / etc / services? ¿O hay una forma diferente?
Respuesta:
Para asegurarse de que el kernel no entregará 49000 y 49001 a los clientes, ya que desea usarlos para sus servidores en Linux.
sysctl -w net.ipv4.ip_local_reserved_ports = 49000, 49001
suéltelo en /etc/sysctl.conf
, y luego ejecute sysctl -p
.
Tenga en cuenta que esto no está probado.