zoukankan      html  css  js  c++  java
  • TCP并发服务器(五)——每个客户一个线程

    TCP并发服务器(五)——每个客户一个线程

    1.说明

    前面4个版本都是关于进程的,可以将进程改为线程来实现。

    这个最简单的版本也快于前面的所有预先派生进程的版本。

     

    2.代码

    #include "unpthread.h"
    
    void sig_int(int signo)
    {
        DPRINTF("sig_int()
    ");
        void pr_cpu_time(void);
        pr_cpu_time();
        exit(0);
    }
    
    void *doit(void *arg)
    {
        void web_child(int);
        DPRINTF("创建一个线程
    ");
        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
    ");
            int connfd = Accept(listenfd, cliaddr, &clilen);
            DPRINTF("Accept a connection
    ");
    
            Pthread_create(&tid, NULL, &doit, (void*)connfd);
        }
    
        return 0;
    }
  • 相关阅读:
    screen命令
    完全背包问题
    01背包问题
    数组排序使得数组负数在正数左边且按照原来的顺序
    Git 后悔药系列
    Nacos作为注册中心和配置中心
    JDK15都出了,你确定不来了解下JDK8吗?
    WPF创建一个凹凸效果的边框
    vue---splitpane分割
    列表实现拖拽
  • 原文地址:https://www.cnblogs.com/hancm/p/3866604.html
Copyright © 2011-2022 走看看