el listen() y bind() los estas lanzando dentro de un fork() ?, si es asi, lo que comunmente se hace es apenas el hijo se crea, se registra el PID en un archivo, y cuando el padre sale lee el archivo del PID y manda un kill() en caso de que el proceso hijo exista, asi te aseguras de que no quede nada corriendo.
2010/6/22 Alvaro Gili <[email protected]> > Gente, vuelvo a postear porque creo que no me hice entender. > 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 asi: > * 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 asi, 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. > Espero haber sido mas claro que antes, gracias y saludos. > -- Eduardo Silva http://edsiper.linuxchile.cl http://www.monkey-project.com

