日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux下的超级服务器inetd

發(fā)布時(shí)間:2023/12/20 linux 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux下的超级服务器inetd 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? inetd服務(wù)是linux開機(jī)初始化由rc程序啟動(dòng)的一項(xiàng)守護(hù)進(jìn)程,它通過(guò)監(jiān)聽端口來(lái)啟動(dòng)各項(xiàng)服務(wù),流程 tcp/udp服務(wù)---->(5000端口來(lái)信)---->inted發(fā)現(xiàn)有來(lái)信----->啟動(dòng)相應(yīng)的服務(wù)程序, 也就是說(shuō)inted服務(wù)器充當(dāng)一個(gè)功能就是創(chuàng)建socket服務(wù)端的前半段,即創(chuàng)建socket---->bind(端口)---->監(jiān)聽---->accept(接受信號(hào)),當(dāng)來(lái)一個(gè)此端口的請(qǐng)求,他會(huì)fork+exec來(lái)執(zhí)行相對(duì)應(yīng)的服務(wù)程序.下面通過(guò)一個(gè)小例子還說(shuō)明inetd服務(wù)的流程:

①. 首先在 /etc/inetd.conf 文件中的最后一行加入

? ? ? ?ma streamtcp nowaitroot ? ?/home/human/bb ? xiao?

? ? ? ?tip: 這幾個(gè)參數(shù)是用tab鍵分開的,這個(gè)inetd.conf文件是inetd服務(wù)器的配置文件,配置好了之后需要重啟一下才能生效

? ? ? ? ? ? ?首先開機(jī)啟動(dòng)的時(shí)候,rc啟動(dòng)inetd服務(wù),此服務(wù)會(huì)讀取inetd.conf文件中的每一行來(lái)進(jìn)行監(jiān)聽,比如這一行,他會(huì)讀取第一個(gè)參數(shù) ma,發(fā)現(xiàn)是ma服務(wù)

? ? ? ? ? ? ?然后它會(huì)在 /etc/service文件中找 ma服務(wù)所對(duì)應(yīng)的端口,所以我們事先也要在/etc/service文件中填入一行 ma ? ?6234/tcp

? ? ? ? ? ? 接著有讀取了 第二第三個(gè)參數(shù), 之后創(chuàng)建socket,bind,listen, accept,第四個(gè)參數(shù)的意思就是創(chuàng)建子進(jìn)程后父進(jìn)程不用等待直接可以接受此端口接受到的下一個(gè)命令

? ? ? ? ? ? 所以 accept 之后就是fork+exec,其中 exec中的啟動(dòng)函數(shù)是第五個(gè)參數(shù)/home/human/bb 名字叫bb的進(jìn)程,第六個(gè)參數(shù)xiao不清楚,沒有試驗(yàn)出來(lái)...

? ? ? ? ? ? 其中程序bb的源碼非常簡(jiǎn)單如下: ? ?

#include <stdio.h> #include <string.h> int main(int argc, char *argv[]) {FILE *fp;system("echo hello >> /home/human/ma.txt");return 0; } 這里就是網(wǎng)文件中打印一句話

之后創(chuàng)建訪問程序(tcp)

#include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <arpa/inet.h> #include <netdb.h> #include <string.h> #include <stdlib.h>#define BUFLEN 255 #define SOCKADDR struct sockaddr #define SERVER_PORT 6234 int main(int argc, char** argv) {struct sockaddr_in servaddr;int sockfd, n, flag;int num1, num2;char buffer[BUFLEN];char errmsg[] = "Server does not function. /n";struct hostent *hp;if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {printf("socket creating error!/n");exit(1);};memset(&servaddr, 0, sizeof(struct sockaddr_in));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(SERVER_PORT);servaddr.sin_addr.s_addr=htonl(INADDR_ANY); if(connect(sockfd, (struct sockaddr *)(&servaddr), sizeof(struct sockaddr_in)) <0 ){printf("Connection Failure!/n");exit(3);} }

結(jié)束語(yǔ):順便提一下為什么會(huì)有inetd服務(wù)器的原因,因?yàn)槿绻麤]有的話,假設(shè)在系統(tǒng)中有10個(gè)請(qǐng)求服務(wù)端,然后就會(huì)創(chuàng)建10個(gè)接受進(jìn)程來(lái)接受服務(wù),這樣系統(tǒng)就多了10個(gè)進(jìn)程,那么如果沒有請(qǐng)求來(lái)的話這10個(gè)進(jìn)程還在掛起狀態(tài),嚴(yán)重的浪費(fèi)了系統(tǒng)的資源, 所以人們就想用一個(gè)進(jìn)程來(lái)做監(jiān)聽,所以就出來(lái)了個(gè)inetd服務(wù)器的東西,就是說(shuō)它讀取/etc/inetd.conf文件讀取10個(gè)進(jìn)程的服務(wù)項(xiàng),然后創(chuàng)建socket等等,這樣系統(tǒng)中只是一個(gè)進(jìn)程在掛起,來(lái)請(qǐng)求時(shí),就調(diào)用相應(yīng)的任務(wù)進(jìn)程即可,這樣節(jié)省了系統(tǒng)的資源



總結(jié)

以上是生活随笔為你收集整理的linux下的超级服务器inetd的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。