嵌入式学习——3——TCP并发(未完成)

1、多进程实现TCP并发

//定义信号处理函数
void handler(int signo)
{
    if(signo == SIGCHLD)
    {
        // 回收所有的僵尸进程
        while(waitpid(-1, NULL, WNOHANG) != 0);    
    }
}

int main(){
    //将SIGCHLD信号绑定到信号处理函数中
    signal(SIGCHLD, handler);

    sfd = socket();           //创建用于通信的套接字文件描述符
    bind();                      //绑定ip地址和端口号
    listen();                 //将套接字设置成被动监听状态

    while(1) {
        newfd = accept();             //阻塞等待客户端连接请求,并为其创建一个新的用于通信的套接字问津描述符
        pid = fork();             //创建子进程用于处理客户端
        if(pid > 0) {
            //父进程
            close(newfd);  
  
        }elseif(pid == 0) {
            // 子进程
            //跟当前客户端进行通信
            close(sfd);           //关闭sfd
            recv();              //阻塞读取消息
            send();              //发送消息
            close(newfd);                //关闭套接字
            exit();                 //退出进程
        }
    }
    close(sfd);                      //关闭监听
    return 0; 
}

2、多线程实现TCP并发

//定义线程体函数
void *deal_cli_msg(void *arg)
{
        //跟当前客户端进行通信
    recv();              //阻塞读取消息
    send();              //发送消息
    close(newfd);                //关闭套接字
    pthread_exit(NULL);            //退出线程
}

int main(){
    sfd = socket();           //创建用于通信的套接字文件描述符
    bind();                      //绑定ip地址和端口号
    listen();                 //将套接字设置成被动监听状态

    while(1) {
        newfd = accept();             //阻塞等待客户端连接请求,并为其创建一个新的用于通信的套接字问津描述符
        pthread_create(&tid, NULL, deal_cli_msg, &info);         //创建分支线程用于跟客户端进行通信
        pthread_detach(tid);                      //将线程设置成分离态
    }
    close(sfd);                      //关闭监听
    return 0;
}

3、select

4、epoll

相关推荐
啦啦右一2 分钟前
前端 | MYTED单篇TED词汇学习功能优化
前端·学习
FeelTouch Labs24 分钟前
Netty实现WebSocket Server是否开启压缩深度分析
网络·websocket·网络协议
霍格沃兹测试开发学社测试人社区30 分钟前
软件测试学习笔记丨Flask操作数据库-数据库和表的管理
软件测试·笔记·测试开发·学习·flask
今天我又学废了1 小时前
Scala学习记录,List
学习
王俊山IT1 小时前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
Mephisto.java2 小时前
【大数据学习 | kafka高级部分】kafka中的选举机制
大数据·学习·kafka
南宫生2 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
长弓三石3 小时前
鸿蒙网络编程系列44-仓颉版HttpRequest上传文件示例
前端·网络·华为·harmonyos·鸿蒙
xianwu5433 小时前
反向代理模块
linux·开发语言·网络·git
follycat3 小时前
[极客大挑战 2019]HTTP 1
网络·网络协议·http·网络安全