linux下的超级服务器inetd
? ? inetd服務是linux開機初始化由rc程序啟動的一項守護進程,它通過監聽端口來啟動各項服務,流程 tcp/udp服務---->(5000端口來信)---->inted發現有來信----->啟動相應的服務程序, 也就是說inted服務器充當一個功能就是創建socket服務端的前半段,即創建socket---->bind(端口)---->監聽---->accept(接受信號),當來一個此端口的請求,他會fork+exec來執行相對應的服務程序.下面通過一個小例子還說明inetd服務的流程:
①. 首先在 /etc/inetd.conf 文件中的最后一行加入
? ? ? ?ma streamtcp nowaitroot ? ?/home/human/bb ? xiao?
? ? ? ?tip: 這幾個參數是用tab鍵分開的,這個inetd.conf文件是inetd服務器的配置文件,配置好了之后需要重啟一下才能生效
? ? ? ? ? ? ?首先開機啟動的時候,rc啟動inetd服務,此服務會讀取inetd.conf文件中的每一行來進行監聽,比如這一行,他會讀取第一個參數 ma,發現是ma服務
? ? ? ? ? ? ?然后它會在 /etc/service文件中找 ma服務所對應的端口,所以我們事先也要在/etc/service文件中填入一行 ma ? ?6234/tcp
? ? ? ? ? ? 接著有讀取了 第二第三個參數, 之后創建socket,bind,listen, accept,第四個參數的意思就是創建子進程后父進程不用等待直接可以接受此端口接受到的下一個命令
? ? ? ? ? ? 所以 accept 之后就是fork+exec,其中 exec中的啟動函數是第五個參數/home/human/bb 名字叫bb的進程,第六個參數xiao不清楚,沒有試驗出來...
? ? ? ? ? ? 其中程序bb的源碼非常簡單如下: ? ?
#include <stdio.h> #include <string.h> int main(int argc, char *argv[]) {FILE *fp;system("echo hello >> /home/human/ma.txt");return 0; } 這里就是網文件中打印一句話之后創建訪問程序(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);} }結束語:順便提一下為什么會有inetd服務器的原因,因為如果沒有的話,假設在系統中有10個請求服務端,然后就會創建10個接受進程來接受服務,這樣系統就多了10個進程,那么如果沒有請求來的話這10個進程還在掛起狀態,嚴重的浪費了系統的資源, 所以人們就想用一個進程來做監聽,所以就出來了個inetd服務器的東西,就是說它讀取/etc/inetd.conf文件讀取10個進程的服務項,然后創建socket等等,這樣系統中只是一個進程在掛起,來請求時,就調用相應的任務進程即可,這樣節省了系統的資源
總結
以上是生活随笔為你收集整理的linux下的超级服务器inetd的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 22 个出口节点对 Tor 网络发动中间
- 下一篇: 大数据开发涉及到的关键技术有哪些?