epoll的用法

epoll的用法

epoll get started

这一章先了解epoll的用法,epoll是一个多路复用器,用来在单线程中处理多个socket链接,它由3个函数组成:

  1. int epoll_create(int size);
  2. int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
  3. int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);

poll_create 用来创建一个epoll对象,虽然是个对象它却返回个int,c又是面向过程的语言? 这是为什么呢?

  1. epoll是linux的概念,linux又是一切皆文件,epoll也被抽象成一个文件(可读、可写),它是操作系统的抽象,不是C语言的。
  2. linux 内核中的文件用文件描述符表示(file descriptor, int类型),所以用int就可以表示一个epoll对象

参数解释:

  • size参数表示最大管理的socket数量。

epoll_ctl用来管理epoll对象中的链接,比如有新客户端链接了,可以使用它把新链接交给epoll监控。

参数解释:

  • epfd 是epoll对象

  • socket链接也被抽象成文件描述符,fd 是要操作(添加、移除)的socket链接

  • op, operation,操作类型,比如添加、移除

  • *event 用来设置监听的事件类型,比如有读事件来来,唤醒线程处理

epoll_wait 用阻塞当前线程,等待新事件到来,服务端所有的事情都做完就可以调用它来等待有人链接服务端或者发送数据给服务端。

参数解释:

  • epfd 是epoll对象
  • *events 是一个数组,epoll 把 IO事件放到这个数组里,epoll_wait结束后从它里读取ready的事件
  • maxevent*events的长度即可
  • timeout 超时时间
posted @ 2020-07-28 11:00  oaksharks  阅读(330)  评论(0编辑  收藏  举报