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 等待返回就绪的文件描述符集合;
    • 分别处理就绪的事件集合,本项目中一共有两类事件:新用户连接事件和用户发来消息事件。
  • 相关阅读:
    闭包的最准确的解释-待翻译
    undefined 和 null 的异同
    Javascript深度克隆一个对象
    产品培训的经验
    JavaScript库开发者们的规则
    IOS ——UI篇—— UITableView的常用属性及代理方法的用法总结
    IOS ——UI篇—— 自定义UITableViewCell的方法
    IOS ——UI篇—— UIScrollView的用法总结
    使用UIKit中的tag属性要注意的
    IOS ——UI篇——UITabBarController的基本用法
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/12159553.html
Copyright © 2011-2022 走看看