我有一个SIP服务器(守护进程),它正在侦听TCP套接字5060。现在,在此父进程中,我创建一个子进程并在子进程中执行某些操作。现在,当我关闭父进程中的此TCP套接字并尝试再次创建时(假设我在此服务器上禁用和启用SIP),创建此套接字会给我带来错误。我已经调试了这个问题并找到了根本原因。根本原因是当子进程被创建时,它继承(获得)所有打开的fd /套接字的副本。当父进程关闭TCP套接字时,它仍然在子进程中打开(ref_counter!= 0),因此我无法在父进程中再次打开套接字!!
现在,我想要的通用解决方案是-一旦启动子进程,它就会检查任何打开的fd(类型为IPv4 / TCP),并将它们关闭,以便该子进程对父进程没有任何副作用。如何在C-unix中实现这一点? 我考虑过通过system(lsof | grep : | awk)获取文件描述符,但我该如何关闭它们? 有没有其他解决办法可以在子进程中关闭套接字?是否有一种方法可以传递端口号并给我已经创建的fd?
我不想要的解决方案是(对我没有帮助的)- 1.在父进程中,最初创建TCP套接字时使用某些标志,以便它们不被子进程复制。 (我不能修改父进程中的套接字创建)! 2.在创建子进程时从父进程传递文件描述符。我无法这样做,因为我没有那个fd。解决方案必须是需要放置在子进程中的东西!
谢谢
现在,我想要的通用解决方案是-一旦启动子进程,它就会检查任何打开的fd(类型为IPv4 / TCP),并将它们关闭,以便该子进程对父进程没有任何副作用。如何在C-unix中实现这一点? 我考虑过通过system(lsof | grep : | awk)获取文件描述符,但我该如何关闭它们? 有没有其他解决办法可以在子进程中关闭套接字?是否有一种方法可以传递端口号并给我已经创建的fd?
我不想要的解决方案是(对我没有帮助的)- 1.在父进程中,最初创建TCP套接字时使用某些标志,以便它们不被子进程复制。 (我不能修改父进程中的套接字创建)! 2.在创建子进程时从父进程传递文件描述符。我无法这样做,因为我没有那个fd。解决方案必须是需要放置在子进程中的东西!
谢谢