我有一个服务,启动后会监听8443端口。
我已将xinetd配置为在端口8443上建立连接时启动服务。
所以xinetd应该启动我的应用程序,然后让我的应用程序处理更多的传入连接。
我得到重复的“警告:无法获取客户端地址:传输端点未连接”,然后xinetd禁用我的服务10秒。
只有当我设置wait=yes时才会发生这种情况。
停止我的应用程序监听端口8443没有什么区别。
我对xinetd wait flag的理解是否正确,或者我在xinetd配置上做了什么错误的事情?
我看过手册页,wait=yes通常与udp相关联,但其中没有任何内容表明您不能将其与tcp一起使用。
我搜索了so,发现的所有东西都有tcp在wait=no下工作。
连接到xinetd时出现以下错误。
5786]: warning: can't get client address: Transport endpoint is not connected
5564]: EXIT: MyApplication status=1 pid=5786 duration=0(sec)
5564]: START: MyApplication pid=5787 from=<no address>
5787]: warning: can't get client address: Transport endpoint is not connected
5564]: EXIT: MyApplication status=1 pid=5787 duration=0(sec)
5564]: Deactivating service MyApplication due to excessive incoming connections. Restarting in 10 seconds.
5564]: FAIL: MyApplication connections per second from=<no address>
5564]: Activating service MyApplication
我的配置是:
disable = no
socket_type = stream
protocol = tcp
wait = yes
user = user
server = /usr/bin/MyApplication
port = 8443
type = UNLISTED
flags = IPv4
最佳答案
如果有人看到这个,我也在找同样的东西。从一位维护人员steve grubb的评论中,他说
等待服务是接受
连接。Telnet不接受连接-它希望连接
接受并将插座复制到标准输入/输出描述符。
Xinetd也无法检查孩子是否接受了
连接。因此,当您有一个被配置为等待的程序时
服务,它不接受连接,当
xinetd返回到select循环。到处都是。
当xinetd fork调用here时,启动子服务器。当wait=true
时,as-mentioend above the child process must accept the connection on the socket.要获取套接字,可以将值为0的文件描述符与accept一起使用。我在下面使用python,
import socket
s = socket.fromfd(0, socket.AF_INET, socket.SOCK_STREAM)
print(s.accept())
它返回(conn,address),其中conn是一个新的套接字对象,可用于发送和接收连接上的数据。