【发布时间】:2011-04-20 10:21:02
【问题描述】:
我有一个 C 网络软件,目前在侦听和分叉模式下工作。它正在侦听某个服务器套接字并接受传入连接。然后它调用提供新接受的套接字的核心服务器函数。
现在我正在尝试使该软件也可以在 xinetd 后面运行(取决于一些运行时参数)。我试图直接调用提供文件描述符 0 而不是接受的套接字的核心服务器函数,但是这种方法不起作用。程序立即以 SIG_PIPE 停止。
这种行为有什么明显的原因吗?我的核心功能执行一些低级套接字调用和信号处理。这应该在 xinetd 后面工作吗?
【问题讨论】:
-
您是否在
xinetd配置中为您的服务指定wait = no?如果您不这样做,它将传递侦听套接字的副本而不是接受的套接字,要求您的服务执行accept()。 -
是的,我指定了等待 = 否,但我确实应该尝试改变我的程序行为来执行接受本身,这可能会解决我遇到的与套接字相关的问题。
-
那应该没问题,使用
wait = no你应该传递从accept()返回的套接字。