我有一个 SIP 服务器(守护进程),它正在侦听 tcp 套接字 5060。现在,在这个父进程中,我创建一个子进程并在子进程中执行一些操作。
现在,当我在父进程中关闭此 tcp 套接字并尝试再次创建(假设我在此服务器上禁用和启用 SIP)时,会发生什么情况,创建此套接字会出现错误。我已经调试了这个问题并找到了根本原因。根本原因是当创建子进程时,它会从父进程继承(获取其副本)所有打开的 fd/socket。当父级关闭 tcp 套接字时,它仍然在子级中打开(ref_counter!= 0),因此我无法在父级中再次打开套接字!
现在,我想要的通用解决方案是 - 一旦子进程启动,它就会检查任何打开的 fd(类型为 IPv4/TCP)并关闭它们,以便该子进程不会对父进程产生副作用。在 C-unix 中如何做到这一点?
我已经考虑过按照 system(lsof | grep | awk) 的方向进行操作并获取文件描述符,但是如何关闭它们?
还有其他解决方案来关闭子进程中的套接字吗?有没有一种方法可以传递端口号并给我已经创建的 fd ?
我不想要的解决方案是(这对我没有帮助)-
1. 在父进程中,最初在创建带有某些标志的 tcp 套接字时,以便它们不会被子进程复制。 (我无法修改父级中的套接字创建)!
2. 在创建子进程时将文件描述符从父进程传递给子进程。我不能这样做,因为我没有那个 fd。解决方案必须是需要放入子进程中的东西!
Thanks
您有文件描述符。只需关闭不需要的即可!
在孩子中,您应该关闭监听套接字。
在父级中,您应该关闭接受的套接字(=新连接)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)