首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >inetd如何将控制转移到相应的服务?

inetd如何将控制转移到相应的服务?
EN

Unix & Linux用户
提问于 2020-03-14 11:44:53
回答 3查看 269关注 0票数 1

inetd如何将控制权传输到服务,下面是我的理解

  • inetd侦听/etc/inetd.conf中提到的每个端口
  • 如果客户端向inetd侦听的端口之一发出请求,则inetd通过查看/etc/inetd.conf将该请求的控制权转移到服务,将其作为子进程旋转。
  • 它是一个多路复用器。

我的疑虑在下面

  • 如何将请求切换到子进程(相应的服务守护进程)?
  • inetd已经在端口上建立了连接,因此在inetd释放该端口之前,子进程不能再次连接该端口。如果inetd释放了该端口,那么现有的客户端连接将被删除(如果我的理解是错误的,请更正我)。
EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2020-03-14 17:24:32

inetd监听端口,然后将其连接到将处理端口的服务的stdin、stdout和stderr。

它是怎么做的

  • 在连接accept之后,它的fds之一上有一个套接字。
  • 然后它将dupfd授权给012
  • 然后它将fork。所有文件描述符都将保持打开状态,除非采取了一些关闭它们的操作(因此,0、1和2仍然处于打开状态)。
  • 然后子进程会调用execfds仍然保持开放状态。
  • 该服务现在正在运行,远程客户端连接到stdin (0)、stdout (1)和stderr (2)。
  • 服务只需要知道客户端在这些文件描述符上,而不是自己执行listen

(我做了一些搜索,但没有看到inetd告诉服务程序它是由inetd调用的。我希望使用命令行参数。)

票数 2
EN

Unix & Linux用户

发布于 2020-03-14 12:25:50

考虑一下这样的行为:

父级

代码语言:javascript
复制
sfd = socket(), listen(), connect(), fork();

对于其他不应由子进程继承的描述符,close()或以前在fork之后将它们设置为FD_CLOEXEC;,父进程可以关闭此sfd。

孩子

继承的连接套接字描述符的execve();副本,可用于客户端I/O

票数 0
EN

Unix & Linux用户

发布于 2020-03-16 07:00:37

Que套接字编程中,它在The Design Parameters of inetd Servers一节中有很好的解释。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/572876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档