在systemd运行的网络服务器中调用accept()后。Netstat没有';我没有表现出我的服务
我不确定以前是否有人问过这个问题。 systemd在我的Linux服务器(3.14.39)上提供了一个运行良好的服务。 现在,我想添加一个函数,创建一个线程,并启动一个小型网络服务器,监听端口在systemd运行的网络服务器中调用accept()后。Netstat没有';我没有表现出我的服务,c,linux,sockets,network-programming,systemd,C,Linux,Sockets,Network Programming,Systemd,我不确定以前是否有人问过这个问题。 systemd在我的Linux服务器(3.14.39)上提供了一个运行良好的服务。 现在,我想添加一个函数,创建一个线程,并启动一个小型网络服务器,监听端口6666。 简单地说 memset(&server_addr,0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htons(INADDR_ANY);
6666
。
简单地说
memset(&server_addr,0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htons(INADDR_ANY);
server_addr.sin_port = htons(6666);
server_socket = socket(PF_INET,SOCK_STREAM,0);
setsockopt(server_socket,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
bind(server_socket,(struct sockaddr*)&server_addr,sizeof(server_addr));
listen(server_socket, 10);
new_server_socket = accept(server_socket,(struct sockaddr*)&client_addr,&length);
以上所有调用都成功返回,程序似乎在等待客户端连接
然而,当我使用netstat-a
检查我的服务器状态时,什么都没有!
我也不能通过telnet连接到套接字
netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:5355 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
tcp 0 0 :::5355 :::* LISTEN
tcp 0 0 :::80 :::* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 :::443 :::* LISTEN
tcp 0 0 :::6556 :::* LISTEN
我做了一个实验来提取相同的C子程序,并将其构建为一个独立的可执行服务器程序,然后在系统启动后运行它。一切正常。。。。所以我想这不是编码错误,防火墙
我还检查了lsof-ni
,可以看到我的服务器和套接字信息
root@:lsof -ni |grep 25199
316 /usr/sbin/test socket:[25199]
希望我自己清楚。。
我只是没有线索和方向如何调试这个。有人知道我现在可以做什么或检查什么吗?甚至建议一份文件也会有帮助!
谢谢
添加更多信息
1. ping 127.0.0.1 is ok so I guess LO is up
root@:~# ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.050 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.066 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.053 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.042 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.041 ms
在注释中粘贴代码似乎效果不好。我的绑定地址初始化代码如下
memset(&server_addr,0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htons(INADDR_ANY);
server_addr.sin_port = htons(6666);
问题解决了,,
结果是网络名称空间问题
不知何故,我得到的systemd服务加入了另一个名为“xxns”的网络名称空间。
虽然netstat只列出默认的ns状态,但我看不到端口6666。
使用下面的命令,我可以看到端口状态
ip netns exec xxns netstat -ant
Telnet也与
ip netns exec xxns telnet 127.0.0.1 6666
因为我以前从未使用过linux名称空间,所以我的调试方向完全不正确,我上面提供的信息也没用…“…程序似乎在等待客户端连接。”如何验证这一点?初始化绑定地址的代码在哪里?你好,感谢您的回复。在调试此问题时,我在bind()之前和之后添加了日志。我可以在bind()打印之前看到日志,但是在bind()打印之后没有看到日志。嗨,EJP,谢谢。绑定地址初始化代码是memset(&server_addr,0,sizeof(server_addr));服务器地址sin家庭=AF网络;服务器地址sin地址s地址=htons(INADDR\U ANY);服务器地址sin端口=htons(6666);对不起,伙计们。但我对stackoverflow还是个新手。只需在第一篇文章中添加我的初始化代码。你应该将它粘贴到你的问题中,它应该放在第一位。在第一篇文章中添加。