守护历程XINETD与SOCKET法式的含义是什么?

3个月前 (11-25 00:51)阅读4回复0
wsygfsj
wsygfsj
  • 管理员
  • 注册排名5
  • 经验值129545
  • 级别管理员
  • 主题25909
  • 回复0
楼主

  1。Xinetd供给被动式的超等办事

也就是办事法式是被利用端所启动,日常平凡则无须存在。例如,ftp, telnetd, pop3,imap, auth等等,那些办事没有人利用时,无须启动。此外,xinetd将socket转换成stdin/stdout,因而使得网路办事程式设想大大简化,您能够只用printf及fgets即可完成处置很复杂的网路协定。

   2。一个简单的办事法式 goodie #include#include#includechar *cmds[]={ "help", "say", "hello", "bye", "exit", NULL }; int getcmd(char *cmd) { int n=0; while (cmds[n]!=NULL) { if (strncasecmp(cmd,cmds[n],strlen(cmds[n]))==0) return n; n++; } return -1; } void main(void) { char buf[1024]; int ok; printf("Welcome to goodie service! "); fflush(stdout); ok=0; do { while (fgets(buf,1023,stdin)==NULL); switch (getcmd(buf)) { case -1: printf("Unknown command! "); break; case 0: printf("How may I help you, sir? "); int j=0; while(cmds[j++]!=NULL)printf(” %s\t\t“,cmds[j-1]); break; case 1: printf("I will say %s",buf[3]); break; case 2: printf("How're you doing today? "); break; case 3: printf("Si ya, mate! "); ok=1; break; case 4: printf("Go ahead! "); ok=1; break; } fflush(stdout); } while (!ok); }3。

  设置装备摆设文件 在/etc/services 中加进如下项 goodie 12345/tcp 办事名是 goodie 办事端口是 12345 办事类型是 TCP 在/etc/xinetd。d目次下新检办事文件 goodie 输进内容: service goodie{ socket_type=stream protocal =tcp wait =no server = /{goodie dir}/goodir disable =no #初始化为开启办事监听}4。

  启动办事 先停行办事 killall xinetd 启动办事 /usr/sbin/xinetd -f /etc/xinetd。conf 5。开启末端毗连 telnet localhost 12345 6。xinetd 的工做原理 通过设置装备摆设xinetd,然后查看响应的套接字和历程,能够看出,xinetd是如许工做的(针对tcp办事) A。

  启动时读取/etc/xinetd。conf文件并为文件中指定的所有办事创建响应的套接字(流或数据报),xinetd能处置的办事的数目依靠于所创建的套接字数目。每个新创建的套接字都被加进到select挪用所用到的描述符集中。 B。对每一个套接字挪用bind,绑定办事端口(/etc/services中定义),端标语通过挪用getservbyname获得。

   C。所有套接字成立后,挪用select期待它们变成可读,当tcp套接字上有数据报到来时变成可读。xinetd在大部门时间阻塞在select的挪用处; D。

  xinetd守护历程fork,由子历程处置办事恳求;子历程封闭除了要处置的套接字之外的所有描述字,子历程三次挪用dup2,把套接字描述字复造到0、

1、2,然后封闭原套接字;以后法式对套接字操做就是对0、

1、2停止操做;子历程exec施行响应的办事器法式。

0
回帖

守护历程XINETD与SOCKET法式的含义是什么? 期待您的回复!

取消