gpt4 book ai didi

c++ - 如何停止监听一个端口

转载 作者:行者123 更新时间:2023-11-29 12:48:02 24 4
gpt4 key购买 nike

我有一个用 C++ 编写的 Linux 应用程序。应用程序监听某个端口上的套接字。我使用 ACE Acceptor 实现了这个。此外,应用程序通过调用 ACE_OS::system 函数使用初始化脚本/etc/init.d/postgresql start 来启动 postgresql 数据库。

我遇到的问题是:当应用程序退出时,端口仍然被占用。当我运行 netstat 时,我看到 postgres 正在监听那个端口。 (只有当我从任何给定端口上的应用程序启动 postgres 时才会发生这种情况)。

有没有办法关闭端口?为什么 postgres 监听那个端口?

最佳答案

Is there a way to close the port?

是的。关闭套接字,或在底层文件描述符上设置 FD_CLOEXEC。

或者...将您对子进程的调用(...postgresql start) 包装成将关闭高于stderr 的fds 的内容:

ACE_OS::system("perl -MPOSIX -e 'POSIX::close($_) for 3 .. sysconf(_SC_OPEN_MAX); exec @ARGV' /etc/init.d/postgresql start");

或类似的。将其放入脚本中以使其看起来更漂亮。

Why does postgres listen to that port?

您的子进程(及其子进程)正在继承您打开的文件描述符,包括您的 C++ 应用程序打开的套接字。

关于c++ - 如何停止监听一个端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7895809/

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