1.Xinetd提供被動(dòng)式的超級(jí)服務(wù)
也就是服務(wù)程序是被使用端所啟動(dòng),平時(shí)則無(wú)須存在。例如,ftp, telnetd, pop3,imap, auth等等,這些服務(wù)沒(méi)有人使用時(shí),無(wú)須啟動(dòng)。此外,xinetd將socket轉(zhuǎn)換成stdin/stdout,因而使得網(wǎng)路服務(wù)程式設(shè)計(jì)大大簡(jiǎn)化,您可以只用printf及fgets便可完成處理很復(fù)雜的網(wǎng)路協(xié)定。
2.一個(gè)簡(jiǎn)單的服務(wù)程序 goodie
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
char *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 中加入如下項(xiàng)
goodie 12345/tcp
服務(wù)名是 goodie 服務(wù)端口是 12345 服務(wù)類型是 TCP
在/etc/xinetd.d目錄下新檢服務(wù)文件 goodie
輸入內(nèi)容:
service goodie
{
socket_type=stream
protocal =tcp
wait =no
server = /{goodie dir}/goodir
disable =no #初始化為開(kāi)啟服務(wù)監(jiān)聽(tīng)
} |
4.啟動(dòng)服務(wù)
先停止服務(wù)
killall xinetd
啟動(dòng)服務(wù)
/usr/sbin/xinetd -f /etc/xinetd.conf
5.開(kāi)啟終端連接
telnet localhost 12345