首页 > 代码库 > 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;}