码迷,mamicode.com
首页 > 系统相关 > 详细

并发服务器(多进程版本)

时间:2017-11-17 19:55:01      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:else   server   apu   fun   hat   child   pid   mil   strong   

 1 int "apue.h"
 2 int  main()
 3 {
 4     int listenfd,connfd;
 5     pid_t childid;
 6     socklen_t len;
 7     struct sockaddr_in serveraddr,clientaddr;
 8     listenfd= socket(AF_INET,SOCK_STREAM,0);
 9     bzero(&serveraddr,sizeof(serveraddr));
10     serveraddr.sin_family=AF_INET;
11     serveraddr.sin_port=htons(8888);
12     serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);
13     bind(listenfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr));
14     listen(listenfd,10);
15     signal(SIGCHLD,sig_func);
16     while(1)
17     {
18         len=sizeof(clientaddr);
19         connfd = accept(listenfd,(struct sockaddr *)&clientaddr,&len);
20         if(connfd<0)
21         {
22             if(errno==EINTR)
23             {
24                 continue;
25             }
26             else{
27                 printf("accept error");
28             }
29         }
30         childid=fork();
31         if(childid==0)
32         {
33             close(listenfd);
34             dowhatyouwant();
35             exit(0);
36         }
37         close(connfd);
38     }
39     
40 }
1 void sig_func(int signo)
2 {
3     pid_t pid;int stat;
4     while(waitpid(-1,&stat,WNOHANG)>0)
5     {
6         printf("child process is closed :->%d",pid);
7     }
8     return NULL;
9 }

这个服务器版本提供了accept返回EINTR错误继续执行的机制,保证了稳定性,而且其创建的子进程服务进程也会被正常的回收掉

子进程结束会给父进程返回一个SIGCHID信号,父进程捕获到这个信号之后会执行信号处理函数,进行子进程的回收。

并发服务器(多进程版本)

标签:else   server   apu   fun   hat   child   pid   mil   strong   

原文地址:http://www.cnblogs.com/coversky/p/7852942.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!