写点什么

关于 EPOLL 触发的事件说明

  • 2025-11-21
    北京
  • 本文字数:752 字

    阅读完需:约 2 分钟

本文分享自天翼云开发者社区《关于EPOLL触发的事件说明》.作者:江****禄

POLLIN -- 接收缓冲区可读, 对端断开及 tcp 连接也属于可读。 LT 模式下:接收缓冲区可读就会触发;ET 模式:状态改变了,比如接收缓冲区从空 ->不空,才会触发一次读。

 

EPOLLOUT -- 发送缓冲区可写, LT 模式:下只要可写就会一直触发。ET 模式:默认连接刚建立时也会触发一次 OUT,后续发送缓冲区从满 ->不满,会触发一次 OUT。

 

EPOLLRDHUP: Linux 2.6.17 单端断开会收到这个事件及 IN(对应 FIN 包),两种处理方式,直接 RDHUP 即可,或者 IN 之后 read size 为 0;

 

EPOLLHUP: 监听一个不可能发送该事件时,上报,例如一个 socket 未 listen,监听 IN 就会报这个错误

 

EPOLLERR:fd 已经关闭,继续 ADD IN 或者 OUT 事件,报错 ERR

 

EPOLLPRI 接收到 send 带的 flag 为 MSG_OOB 标志的数据。

 

EPOLLONESHOT(linux 2.6.2)

这个选项用的比较少,作用是当关心的 fd 上产生事件时,epoll 将会停止关注和上报 fd 后续的事件,我们需要在处理完事件后再调用 epoll_ctl 重新安装关心的事件。我能想到这个选项的作用可能是在使用 ET 模式时提高效率,比如我们在读数据时,又有新数据到来,可以一直读取完而不用再产生和关注新事件。

 

POLLWAKEUP(linux 3.5)

这个选项很罕见,简单介绍下。当 linux 运行于 autosleep 模式时,当有事件产生时将设备从 sleep 状态唤醒,设备驱动在事件入队之后就继续 sleep.如果要让设备等事件处理后再进行 sleep 状态就要设备此标志。

 

EPOLLEXCLUSIVE(linux 4.5)

设置独占唤醒模式。这个标志主要用在我们用多个 epoll 监听同一个 fd 时,保证当事件到来时只唤醒其中一个 epoll.这个标志默认不会设置,因此会有“惊群效应”

如果多个 epoll 监听同一个 fd,部分设置了此选项,部分没有设置此选项。那么到事件到来时,所有未设置此选项的 epoll 都会唤醒,设置此选项的至少唤醒一个。

用户头像

还未添加个人签名 2022-02-22 加入

天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。

评论

发布
暂无评论
关于EPOLL触发的事件说明_CDN_天翼云开发者社区_InfoQ写作社区