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; }
TCP并发服务器(五)——每个客户一个线程,布布扣,bubuko.com
时间: 2024-08-09 17:16:32