【发布时间】:2016-02-22 22:23:02
【问题描述】:
我有一个 TCP 服务器应用程序,它有时需要重新配置绑定的端口,方法是关闭它们,然后再打开它们。
应用程序还需要执行与它通信的外部二进制文件。目前这是使用 popen() 调用完成的。外部二进制运行时间可以跨越需要重新配置网络端口的时间段。
问题是,当主应用程序关闭一个端口时,它会被 popen 创建的用于运行二进制文件的“分叉”进程占用。
这是有道理的(已在 What happens when a tcp server binds and forks before doing an accept ? Which process would handle the client requests? 讨论过),但不可取,因为主应用程序随后无法重新打开端口。
这是可以使用 popen(3) 中的 FD_CLOEXEC O_CLOEXEC 的地方吗?应用程序需要 popen(3) 提供的管道作为执行二进制文件的标准输入,当 CLOEXEC 关闭其他文件句柄时该文件句柄保持打开状态。
有没有更好的方法来运行二进制文件,这不会导致分叉的进程保留一个关闭的端口?
How to fork process without inheriting handles? 上还有另一个可能相关的问题
【问题讨论】:
-
什么是外部二进制文件,它在做什么?
标签: c linux multithreading tcp fork