1

我有一个 C 网络软件,目前在侦听和分叉模式下工作。它正在侦听某个服务器套接字并接受传入连接。然后它调用提供新接受的套接字的核心服务器函数。

现在我正在尝试使该软件也可以在 xinetd 后面运行(取决于一些运行时参数)。我试图直接调用提供文件描述符 0 而不是接受的套接字的核心服务器函数,但是这种方法不起作用。程序立即以 SIG_PIPE 停止。

这种行为有什么明显的原因吗?我的核心功能执行一些低级套接字调用和信号处理。那应该在 xinetd 后面工作吗?

4

1 回答 1

1

不是绝对确定,但不是您可以在套接字句柄上执行的所有操作都适用于普通文件句柄。首先,您不能写入标准输入。还有一些系统调用可能需要一个套接字,例如recv().

编辑

另一种可能性:您的服务器进程是否在启动时关闭标准输入?

于 2011-04-20T10:59:18.237 回答