• C语言简单实现epoll服务器(一)


    C/S模型

    TCP通信C/S模型图如下所示:

    TCP服务端通信的常规步骤:

    • 使用 socket() 创建 TCP 套接字(socket)
    • 将创建的套接字绑定到一个本地地址和端口上(Bind)
    • 将套接字设为监听模式,准备接收客户端请求(listen)
    • 等待客户请求到来: 当请求到来后,接受连接请求,返回一个对应于此次连接的新的套接字(accept)
    • 用 accept 返回的套接字和客户端进行通信(使用 write() / send() 或 send() / recv() )返回,等待另一个客户请求关闭套接字

    TCP客户端通信的常规步骤:

    • 创建套接字(socket)
    • 使用 connect() 建立到达服务器的连接(connect)
    • 客户端进行通信(使用 write() / send() 或 send() / recv() )
    • 使用 close() 关闭客户连接

    epoll函数介绍:

    int epoll_create(int size)
    
    //创建一个epoll句柄,参数size用来告诉内核监听的数目,size为epoll所支持的最大句柄数
     
    
    int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)
    
    //函数功能: epoll事件注册函数
    
    //参数epfd为epoll的句柄,即epoll_create返回值
    
    //参数op表示动作,用3个宏来表示: 
    
    EPOLL_CTL_ADD//(注册新的fd到epfd),
    
    EPOLL_CTL_MOD//(修改已经注册的fd的监听事件),
    
    EPOLL_CTL_DEL//(从epfd删除一个fd);
    //其中参数fd为需要监听的标示符;
    
    //参数event告诉内核需要监听的事件,event的结构如下:
    
    struct epoll_event {
    
        __uint32_t events; //Epoll events
    
          epoll_data_t data; //User data variable
    
    }; 

    服务端调用epoll步骤如下:

    • 调用 epoll_create 函数在 Linux 内核中创建一个事件表;
    • 然后将文件描述符(监听套接字 listener )添加到所创建的事件表中;
    • 在主循环中,调用 epoll_wait 等待返回就绪的文件描述符集合;
    • 分别处理就绪的事件集合,本项目中一共有两类事件:新用户连接事件和用户发来消息事件。
  • 相关阅读:
    HDU 3008 DP
    XCode 7 高速切换代码窗体和文档窗体
    软工视频(37~46)-软件管理
    js 实现对ajax请求面向对象的封装
    sgu101Domino
    如何查看Eclipse的数字版的版本(转)
    Java的历史和大事记
    Eclipse使用前准备(转)
    启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!
    如何快速配好java环境变量和查看电脑上安装JDK的版本位数
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/12159553.html
Copyright © 2020-2023  润新知