如何停止监听端口

发布于 2024-12-12 02:12:50 字数 309 浏览 0 评论 0原文

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

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

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

I have a linux application written in c++.
The application listens to a socket on a certain port. I implemented this using ACE Acceptor.
In addition the application starts postgresql database using the init script /etc/init.d/postgresql start by calling the ACE_OS::system function.

The problem I am having is: When the application exits, the port is still occupied. When I run netstat I see that the postgres is listening to that port. (This only happens if I start postgres from the application on any given port).

Is there a way to close the port? Why does postgres listen to that port?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

偏爱自由 2024-12-19 02:12:50

有办法关闭端口吗?

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

或者...将您的调用包装到子进程(...postgresql start)中,并使用将关闭高于 stderr:

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

或类似文件的 fds 的内容。将其放入脚本中以使其看起来更好。

为什么 postgres 监听该端口?

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

Is there a way to close the port?

Yes. Close the socket, or set FD_CLOEXEC on the underlying file descriptor.

Or ... wrap your call to the child process (...postgresql start) with something that will close fds higher than stderr:

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

or similar. Tuck that in a script to make it look nicer.

Why does postgres listen to that port?

Your child processes (and their children) are inheriting your open file descriptors, including the socket your c++ app opens.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文