zoukankan      html  css  js  c++  java
  • 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 等待返回就绪的文件描述符集合;
    • 分别处理就绪的事件集合,本项目中一共有两类事件:新用户连接事件和用户发来消息事件。
  • 相关阅读:
    在IIS上启用Gzip压缩(HTTP压缩)
    跨数据库服务器查询和跨表更新
    GOOGLE高级搜索的秘籍
    NET中的规范标准注释(二) -- 创建帮助文档入门篇
    NET中的规范标准注释(一) -- XML注释标签讲解
    如何取出word文档里的图片
    System帐户!我使用你登陆
    横竖两个数字塔的效果BAT批处理怎么写?
    用批处理修改日期,然后在改回来
    根据日期计算星期几----蔡勒(Zeller)公式推导
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/12159553.html
Copyright © 2011-2022 走看看