ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-01-07 09:00:54  阅读:220  来源: 互联网

标签:event epoll int C语言 fd 服务器 接字 监听


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 等待返回就绪的文件描述符集合;
  • 分别处理就绪的事件集合,本项目中一共有两类事件:新用户连接事件和用户发来消息事件。

标签:event,epoll,int,C语言,fd,服务器,接字,监听
来源: https://www.cnblogs.com/wanghao-boke/p/12159553.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有