Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/06/2010, 08:59
Avatar de Alvaro Gili
Alvaro Gili
 
Fecha de Ingreso: mayo-2006
Ubicación: Río Cuarto, Córdoba
Mensajes: 3
Antigüedad: 17 años, 11 meses
Puntos: 0
Manejo de puertos en linux

Que tal gente del foro, hace un tiempo que estoy renegando con una aplicación que hice en Qt4 para Linux y no puedo solucionar un problema que parece tonto pero me está volviendo loco.
La aplicación que estoy haciendo yo es como por ejemplo el administrador
de servicios de windows o el Bum que se puede instalar el ubuntu. Es una aplicación que dada una lista de demonios, monitorea su estado y a su vez permite arrancarlos y pararlos.
Más allá de eso, mi aplicación también levanta un web service. Entonces
la secuencia es así:
* Ejecuto mi aplicación la cual levanta su web service y muestra la lista de demonios que monitorea.
* Ahora a través de ella ejecuto o pongo a correr uno de estos demonios que monitorea.
* Supongamos, o en realidad es así, mi aplicación se llama TrayMon y el demonio que ejecuta se llama FTM.
* Dado todos los pasos anteriores ejecuto en la consola: "sudo netstat -nap
| grep 3000" y me muestra en la consola:
tcp 0 0 192.168.0.130:3000 0.0.0.0:* ESCUCHAR 2525/TrayMon
* Ahora cierro mi aplicación(TrayMon) y el demonio queda corriendo (esta bien que sea así). Pero yo vuelvo a hacer el netstat y me muestra:
tcp 0 0 192.168.0.130:3000 0.0.0.0:* ESCUCHAR 3064/FTM

Observen como el puerto quedó asociado al demonio y esto no debería ser así,
porque si bien el TrayMon ejecuta el FTM, son totalmente independientes entre si. Y por supuesto si quiero levantar de nuevo el TrayMon, me dice que el puerto está ocupado. Acá en la oficina creemos que es un problemas de "Padres e hijos", como que linux toma que el TrayMon es el padre del FTM y por eso hace esta asociación.
para poner a correr el demonio dentro del código uso una llamada al system de C. Y todos me dicen que pasa esto porque adentro usa un fork. Ya probé con QProcess y pasa lo mismo. Alguien tiene alguna solución?, ya sea otra función o al menos, algún demonio que esté corriendo siempre que que yo le diga que ejecute mi demonio?
Gracias gente