APUE上写的超级服务器上inetd,估计这是unix上的程序名,我用的是linux,linux上面则是xinetd,为何linux上加了个x我不得而知.
inetd启动后,从/etc/inetd.conf文件中读取由它启动的服务器信息(linux下为/etc/xinetd.conf文件,该文件又include了/etc/xinetd.d目录,各服务器的配置都在这个目录下).
引用:socket #1
|
bind
|
listen(若是TCP服务器)返回#1继续循环 通常由服务名得到端口号getservbyname
|
select #2
|
accept(若是TCP服务器,得到fd)
|
fork
/ \
/ \
/ \
pid>0 pid==0(子进程)
goto #2 除accept得到的描述符外,将所有其它的socket描述符都关闭
close(fd) |
FD_CLR |
用dup将accept得到的描述符复制到0,1,2上
(即标准输入/标准输出/标准错误)
|
setuid,setgid (当时是root权限,如果不是以root用户执行则因修改权限)
|
|
exec服务器程序
此后服务器接收和发送数据都对标准输入/标准输出/标准错误进行操作.
一般提供大量服务的服务器都不应该由inetd进程监听端口,如:web服务器,sendmail服务器等.要提供大量的服务由inetd来监听,响应会很慢.

