小编jga*_*ida的帖子

从C++应用程序启动Linux服务时避免套接字继承

我有一个Linux服务(守护进程),它有多个线程,并使用boost io_service监听TCP套接字.当我在该套接字上收到某个消息时,我想用例如启动另一个服务/etc/init.d/corosync start.

问题是,在启动服务后,当我退出自己的服务时,另一个服务从我自己的服务继承了套接字,并且它仍处于一种奇怪的状态,我无法以通常的方式停止它.

在退出我的进程"MonitorSipServer"之前,打开的套接字显示如下:

netstat -anop |grep 144
tcp        0      0 0.0.0.0:20144           0.0.0.0:*               LISTEN          4480/MonitorSipServ off (0.00/0/0)
tcp        0      0 140.0.24.181:20144      140.0.101.75:47036      ESTABLISHED 4480/MonitorSipServ off (0.00/0/0)
Run Code Online (Sandbox Code Playgroud)

退出我的进程"MonitorSipServer"后,打开的套接字显示如下:

netstat -anop |grep 144
tcp        0      0 0.0.0.0:20144           0.0.0.0:*               LISTEN      4502/corosync    off (0.00/0/0)
tcp        0      0 140.0.24.181:20144      140.0.101.75:47036      ESTABLISHED 4502/corosync    off (0.00/0/0)
Run Code Online (Sandbox Code Playgroud)

我已经试过system,popen并与fork+ execvexecvenull环境.它总是相同或更糟.我最后的希望是Linux setsid命令,但它也没有用.

任何帮助,将不胜感激.此致,Jan

c++ sockets linux boost boost-asio

5
推荐指数
1
解决办法
1418
查看次数

标签 统计

boost ×1

boost-asio ×1

c++ ×1

linux ×1

sockets ×1