1

我假设 (x)inetd 像大多数守护进程一样工作,因为当它accept()在它正在监视的端口上建立连接时,会创建一个套接字。然而,不知何故,在它成为目标服务程序之前fork()exec()它设法将这个双向套接字转换为三个标准 I/O 描述符 STDIN、STDOUT 和 STDERR。

我一直在询问如何在不滚动我自己的inetd 版本的情况下克服这种行为,但没有成功。我突然想到以这种方式提出这个问题,因为它可能会为我如何将文件描述符 0、1 和 2 重新“加入”到单个套接字中提供线索。

我希望服务程序通过单个套接字进行双向通信的原因是它需要使用基于单个双向套接字的 I/O 基础结构。

4

1 回答 1

0

传入inet.d服务器的数据将被映射到stdin,并且inet.d处理程序的fprintf(stdout)fprintf(stderr)将通过合并为一个流发送回客户端。

这里的问题是 telnet 客户端无法区分 stdout 和 stderr 流。如果需要,请使用ssh而不是telnet,这提供了选项。

于 2013-09-03T09:34:53.783 回答