gpt4 book ai didi

关闭子进程中打开的套接字

转载 作者:可可西里 更新时间:2023-11-01 02:35:07 25 4
gpt4 key购买 nike

我有一个 SIP 服务器(守护进程)正在监听 tcp 套接字 5060。现在在这个父进程中我创建了一个子进程并在子进程中做一些事情。现在,当我在父进程中关闭此 tcp 套接字并尝试再次创建时(假设我正在禁用和启用此服务器上的 SIP),创建此套接字时会发生错误。我已经调试了这个问题并找到了根本原因。根本原因是当创建子项时,它从父项继承(获取副本)所有打开的 fd/套接字。当父级关闭 tcp 套接字时它仍然在子级中打开 (ref_counter!=0) 因此我无法在父级中再次打开套接字!!

现在,我想要的通用解决方案是 - 一旦子进程启动,它就会检查任何打开的 fd(IPv4/TCP 类型)并关闭它们,这样子进程就不会对父进程产生副作用。这在 C-unix 中如何完成?我已经考虑过在 system(lsof | grep | awk) 的方向上做并获取文件描述符,但是我该如何关闭它们?关闭子 socket 的任何其他解决方案?有没有一种方法可以传递端口号,它会给我已经创建的 fd ?

我不想要的解决方案是(这对我没有帮助)-
1. 在父进程中,最初在创建带有一些标志的 tcp 套接字时,它们不会被子进程复制。 (我不能修改父套接字的创建)!2. 在创建子进程时将文件描述符从父进程传递给子进程。我不能那样做,因为我没有那个 fd。解决方案必须是需要放在子进程中的东西!

谢谢

最佳答案

你有文件描述符。关闭不需要的!

在 child 中你应该关闭监听套接字。

在父级中,您应该关闭已接受的套接字(=新连接)。

关于关闭子进程中打开的套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19319387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com