Linux并发服务器模型一多进程

作者: wulegekong | 来源:发表于2017-02-20 15:33 被阅读0次
    • 服务器务必要对应多个客户端, 但是accept是一个阻塞函数, 所以根据需求, 主进程可以负责accept, 然后子进程对接受请求的文件描述符进行通信, 而不会影响主进程的accept.
    • 注意: 1. 创建完子进程之后, 共享文件描述符, 但是子进程对监听的文件描述符不需要, 所以关闭监听文件描述符. 2. 子进程资源的回收: 因为父进程在负责accept, 无法顾及子进程资源的回收, 这是一般通过信号来解决, 即在fork之前, 或者父进程里注册信号捕捉.但是在处理函数中使用的wait要使用循环来wait, 因为如果有多个进程同时需要回收, 但是信号是不支持排队, 所以需要循环回收
    void func(int no) {
         while(waitpid() > 0) 
    }
    
    tcp多进程伪代码: 回头更新完整代码
    int main {
        // 创建监听的套接字
    int lfd = socket()
    // 绑定
    bind(lfd, &sockaddr_in, len); // 监听
    listen(lfd, 128);
    // 注册信号捕捉
    struct sigaction act; sigaction(SIGCHLD, &act, NULL);
    while(1) {
    // 阻塞等待连接请求 int cfd = accept();
    // 创建子进程
    pid_t pid = fork();
    // 子进程 if(pid == 0) {
    close(lfd);
    // 通信 - 客户端 
    while(1)
    {
    // 接收数据 recv(cfd);
    // 发送数据 send(cfd);
    } }
    } }
    void func(int no) {
    while(waitpid() > 0) 
    }
    

    相关文章

      网友评论

        本文标题:Linux并发服务器模型一多进程

        本文链接:https://www.haomeiwen.com/subject/obkewttx.html