首页 > 代码库 > TCP并发服务器(五)——每个客户一个线程
TCP并发服务器(五)——每个客户一个线程
TCP并发服务器(五)——每个客户一个线程
1.说明
前面4个版本都是关于进程的,可以将进程改为线程来实现。
这个最简单的版本也快于前面的所有预先派生进程的版本。
2.代码
#include "unpthread.h"void sig_int(int signo){ DPRINTF("sig_int()\n"); void pr_cpu_time(void); pr_cpu_time(); exit(0);}void *doit(void *arg){ void web_child(int); DPRINTF("创建一个线程\n"); Pthread_detach(pthread_self()); //int connfd = (int)arg; web_child((int)arg); Close((int)arg); return NULL;}int main(int argc, char *argv[]){ socklen_t addrlen; int listenfd; if (argc == 2) { listenfd = Tcp_listen(NULL, argv[1], &addrlen); } else if (argc == 3) { listenfd = Tcp_listen(argv[1], argv[2], &addrlen); } else { err_sys("Usage: a.out [ <host> ] <port#>"); } struct sockaddr *cliaddr = (struct sockaddr*)Malloc(addrlen); Signal(SIGINT, sig_int); pthread_t tid; for (;;) { socklen_t clilen = addrlen; DPRINTF("Wait for a connection\n"); int connfd = Accept(listenfd, cliaddr, &clilen); DPRINTF("Accept a connection\n"); Pthread_create(&tid, NULL, &doit, (void*)connfd); } return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。