我有一个C网络软件,目前在监听和分叉模式下工作。它正在监听一些服务器套接字并接受传入的连接。然后调用核心服务器函数,提供新接受的套接字。
现在我正试图使该软件也工作在xinetd(取决于一些运行时参数)。我试图直接调用提供文件描述符0的核心服务器函数,而不是一个可接受的套接字,但这种方法就是不起作用。程序立即停止并返回一个SIG_PIPE。
这种行为有什么明显的原因吗?我的核心函数执行一些低级套接字调用和信号处理。
不完全确定,但并不是在套接字句柄上所能做的一切也适用于普通文件句柄。首先,您不能写入stdin。还有一些系统调用可能需要套接字,例如recv()
.
编辑
另一种可能性:你的服务器进程关闭stdin作为其启动的一部分?