Chinaunix首页 | 论坛 | 博客
  • 博客访问: 548427
  • 博文数量: 911
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 7395
  • 用 户 组: 普通用户
  • 注册时间: 2022-03-07 15:28
个人简介

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

文章分类

全部博文(911)

文章存档

2026年(14)

2025年(202)

2024年(244)

2023年(247)

2022年(202)

我的朋友

分类: 网络与安全

2025-11-26 12:00:43

本文分享自天翼云开发者社区《关于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都会唤醒,设置此选项的至少唤醒一个。

阅读(9) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~