多路转接IO模型---epoll

目录

一、 历史定位

二、 接口

1、创建

int epoll_create(int size);

2、操作:

int   epoll_ctl(int epfd, int  op,  struct  epoll_event  *event)

3、等待:

        int  epoll_wait (int epfd,  struct  epoll_event  *events, int  maxevents , int  timeout);

三、epoll的工作原理


一、 历史定位

迄今为止,linux平台性能最好的IO多路转接模型。没有之一。

二、 接口

1、创建

int epoll_create(int size);

size :  目前已经弃用了,但是为了向下兼容,需要给size传递大于0的数字

 epoll_create的意义是什么?

 

 返回值:epoll操作句柄

有了操作句柄就能操控创建出来的结构体        eventpoll

2、操作:

int   epoll_ctl(int epfd, int  op,  struct  epoll_event  *event)

参数:

epfd :   epoll操作句柄

op:     options,  通过不同的op,告诉epoll_ctl函数该完成什么事情

  • EPOLL_CTL_ADD
  • 添加一个文件描述符对应的事件结构到epoll当中
  • EPOLL_CTL_MOD
  • 修改一个文件描述符的事件结构
  • EPOLL_CTL_DEL
  • 从epoll当中删除一个文件描述符对应的事件结构

fd:   待处理(添加,修改,删除)的文件描述符,这个fd是告诉epoll_ctl函数的

event:   epoll当中的事件结构

文件描述符对应的事件结构event中events是我们要关心的事件,这里如果同时多个事件那么我们也用或的方式连接。

返回值:

        0正常。

        -1失败。

3、等待:

        int  epoll_wait (int epfd,  struct  epoll_event  *events, int  maxevents , int  timeout);

参数:

epfd :

        epoll的操作句柄

events :

        事件结构数组(集合),从epoll当中获取就绪的事件结构

maxevents :

        最多一次获取多少个事件结构

timeout :

  • >0 :带有超时事件
  • ==O:非阻塞
  • <0:阻塞

三、epoll的工作原理

四、 epoll简单服务端多路转接服务器

这里我们可以先封装一个对于服务端的tcp类,来为服务端提供tcp服务。

 然后我们来实现一个epoll的监控

我们来验证一下:

我们运行代码可以看到多个客户端连接服务端并向其发送消息服务端都可以接收到。

 

おすすめ

転載: blog.csdn.net/flyingcloud6/article/details/129472359