TCP并发服务器(一)——每个客户一个子进程
2014-07-23 22:33
330 查看
TCP并发服务器(一)——每个客户一个子进程
1.说明
这是最传统的并发服务器,对于每一个客户请求fork一个子进程。问题在于每次fork一个子进程比较耗费时间,下面会讲预创建进程。
程序代码基于UNP的库。
程序在使用进程的模式下是最慢的。
2.代码
1.说明
这是最传统的并发服务器,对于每一个客户请求fork一个子进程。问题在于每次fork一个子进程比较耗费时间,下面会讲预创建进程。
程序代码基于UNP的库。
程序在使用进程的模式下是最慢的。
2.代码
#include "unp.h" int main(int argc, char *argv[]) { int listenfd; socklen_t addrlen; if (argc = 2) { listenfd = Tcp_listen(NULL, argv[1], &addrlen); } else if (argc ==3) { listenfd = Tcp_listen(argv[1], argv[2], &addrlen); } else { err_quit("Usage: a.out [ <host> ] <port#>"); } struct sockaddr *cliaddr = (struct sockaddr*)Malloc(addrlen); void sig_chld(int), sig_int(int), web_child(int); Signal(SIGCHLD, sig_chld); Signal(SIGINT, sig_int); for ( ; ;) { socklen_t clilen = addrlen; DPRINTF("Wait for a connection\n"); int connfd = accept(listenfd, cliaddr, &clilen); //clilen用于值-结果参数,可能会改变,所以每次重新赋值,所以此处不能使用addrlen DPRINTF("Accept a connection\n"); if (connfd < 0) { if (errno == EINTR) { continue; } else { err_sys("accept() error"); } } pid_t childpid = Fork(); if (childpid == 0) { //child process DPRINTF("Fork a child process\n"); Close(listenfd); //close listening socket web_child(connfd); //process request exit(0); } Close(connfd); //parent closes connected socket } //end for(;;) return 0; } void sig_int(int) { DPRINTF("sig_int()\n"); void pr_cpu_time(void); pr_cpu_time(); exit(0); } void sig_chld(int) { static int cnt = 0; pid_t pid; int stat; //param1: 想要等待的PID;-1: 等待第一个终止的子进程 //param2: 子进程的终止状态(整数) //param3: 附加选项;WNOHANG:没有子进程终止时,不阻塞 while ((pid = waitpid(-1, &stat, WNOHANG)) > 0) { //成功:返回进程ID > 0, 出错:0或-1 DPRINTF("Waitpid for %d child process\n", ++cnt); ; } return; }
相关文章推荐
- TCP并发服务器,每个客户一个子进程
- TCP并发服务器,每个客户一个子进程
- TCP并发server,每个客户一个子进程
- TCP并发服务器程序,每个客户一个子进程
- TCP并发服务器程序,每个客户一个子进程
- UNIX网络编程卷1 服务器程序设计范式1 并发服务器,为每个客户请求fork一个进程
- TCP并发服务器程序,每个客户一个子进程
- 守护进程之客户进程-服务器进程模型
- Linux网络编程--单进程服务器处理多客户请求(I/O复用)
- java socket实现的客户端和服务器端,服务器采用多线程实现,为每个客户分配一个线程
- 第二十篇:不为客户连接创建子进程的并发回射服务器(poll实现)
- 第十九篇:不为客户连接创建子进程的并发回射服务器(select实现)
- 进程间通信之客户进程-服务器进程属性
- (MFC实现)TCP服务器设计 - 每个客户连接对应一个线程
- TCP服务器设计范式 - 每个客户连接对应一个线程
- socket编程之TCP单进程客户服务器
- shell:统计web服务器每天客户访问量及每个时段的访问量
- socket编程(TCP单进程客户服务器通信)
- 不为客户连接创建子进程的并发回射服务器( poll实现 )
- UNIX网络编程卷1 服务器程序设计范式6 并发服务器,为每个客户请求创建一个线程