UNIX网络编程卷1 服务器程序设计范式6 并发服务器,为每个客户请求创建一个线程
2014-08-26 11:51
281 查看
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie
1.为每个客户请求创建一个线程,以取代为每个客户派生一个子进程
1.为每个客户请求创建一个线程,以取代为每个客户派生一个子进程
/* include serv06 */ #include "unpthread.h" int main(int argc, char **argv) { int listenfd, connfd; void sig_int(int); void *doit(void *); pthread_t tid; socklen_t clilen, addrlen; struct sockaddr *cliaddr; //1.创建监听套接字 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: serv06 [ <host> ] <port#>"); cliaddr = Malloc(addrlen); //2.设置中断信号 SIGINT 的处理函数 Signal(SIGINT, sig_int); //3.主线程循环 for ( ; ; ) { clilen = addrlen; //阻塞在 accept 调用 connfd = Accept(listenfd, cliaddr, &clilen); //为新的客户连接创建一个新线程 Pthread_create(&tid, NULL, &doit, (void *) connfd); } } //新线程的执行函数 void * doit(void *arg) { void web_child(int); //1.调用 Pthread_detach 使新线程脱离主线程,这样主线程就不用等它返回 Pthread_detach(pthread_self()); //2.调用 web_child 处理客户请求 web_child((int) arg); //3.关闭已连接套接字 Close((int) arg); return(NULL); } /* end serv06 */ // SIGINT 信号处理函数 void sig_int(int signo) { void pr_cpu_time(void); pr_cpu_time(); exit(0); }
相关文章推荐
- UNIX网络编程卷1 服务器程序设计范式1 并发服务器,为每个客户请求fork一个进程
- TCP服务器设计范式 - 每个客户连接对应一个线程
- TCP服务器设计范式 - 每个客户连接对应一个线程
- UNIX网络编程卷1 服务器程序设计范式7 预先创建线程,以互斥锁上锁方式保护accept
- (MFC实现)TCP服务器设计 - 每个客户连接对应一个线程
- 一个Servlet同一时刻只有一个实例。 当多个请求发送到同一个Servlet,服务器会为每个请求创建一个新线程来处理。
- UNIX网络编程卷1 server程序设计范式1 并发server,为每一个客户请求fork一个进程
- TCP并发服务器(五)——每个客户一个线程
- UNIX网络编程卷1 服务器程序设计范式0 迭代服务器
- UNIX网络编程卷1 服务器程序设计范式8 预先创建线程,由主线程调用accept
- UNIX网络编程卷1 服务器程序设计范式2 预先派生子进程,每个子进程调用accept
- TCP并发服务器(六)——创建线程池,每个线程accept,accept使用互斥锁保护——基于UNP代码
- 当多个客户请求一个servlet时,引擎为每个客户启动一个线程,那么servlet类的成员变量被所有的线程共享?
- java socket实现的客户端和服务器端,服务器采用多线程实现,为每个客户分配一个线程
- 两台pc机用一个socket通信,每个pc机创建两个线程一个发消息一个收消息 windows socket
- Java并发(基础知识)—— 创建、运行以及停止一个线程
- Java核心知识点学习----线程中如何创建锁和使用锁 Lock,设计一个缓存系统
- TCP并发服务器程序,每个客户一个子进程
- 导客户联系人出现错误:在任何指定时间,ARHDQMSS 只允许有一个待定并发请求。
- 网络编程之TCP通信,为什么在Serve端为每个Client端开辟一个单独的线程来处理Client的请求