我认为(x)inetd与大多数守护进程一样工作,因为当accept()
在它正在监视的端口上建立连接时,会创建一个套接字。不过,不知何故,在它fork()
和exec()
之前,它设法将这个双向套接字转换为三个标准I / O描述符STDIN,STDOUT和STDERR。
我一直在询问如何在没有滚动我自己版本的inetd的情况下打败这种行为,但没有成功。我突然想到以这种方式提出这个问题,因为它可能会让我知道如何将文件描述符0,1和2重新“连接”到一个套接字中。
我希望服务程序通过单个套接字进行双向通信的原因是它需要使用基于单个双向套接字的I / O基础架构。
答案 0 :(得分:0)
inet.d 服务器的传入数据将映射到 stdin , fprintf(stdout)& inet.d 处理程序的 fprintf(stderr)将通过合并为一个流发送回客户端。
这里的问题是telnet客户端无法区分stdout和stderr流。如果需要,请使用 ssh 而不是 telnet ,这会提供选项。