嵌入式学习——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

相关推荐
.千余1 小时前
【Linux】基本指令3
linux·服务器·开发语言·学习
南境十里·墨染春水2 小时前
C++ 笔记 thread
java·开发语言·c++·笔记·学习
南境十里·墨染春水2 小时前
C++ 笔记 高级线程同步原语与线程池实现
java·开发语言·c++·笔记·学习
lkforce2 小时前
MiniMind学习笔记(二)--model_minimind.py
笔记·python·学习·minimind·minimindconfig
Y学院3 小时前
网络安全基础核心知识点教程
网络·web安全·php
三品吉他手会点灯3 小时前
C语言学习笔记 - 1.C概述 - 本讲内容概述
c语言·笔记·学习
嵌入式小企鹅4 小时前
国产大模型与芯片加速融合,RISC-V生态多点开花,AI编程工具迈入自动化新纪元
人工智能·学习·ai·嵌入式·算力·risc-v·半导体
光影少年4 小时前
Monorepo架构是什么,如何学习Monorepo架构?
前端·学习·架构·前端框架
醇氧4 小时前
Hermes Agent 学习(安装部署详细教程)
人工智能·python·学习·阿里云·ai·云计算
风曦Kisaki5 小时前
#企业级网络架构Day01:网络概述,网络参考模型,交换机命令行
网络·架构·智能路由器