epoll
是 Linux 中高效处理大量文件描述符的 I/O 事件通知机制,支持以下主要事件类型:
-
EPOLLIN
-
文件描述符可读。
-
适用场景:数据到达、连接关闭、监听套接字有新连接。
-
-
EPOLLOUT
-
文件描述符可写。
-
适用场景:缓冲区有空闲,可以发送数据。
-
-
EPOLLRDHUP (since Linux 2.6.17)
-
对端关闭连接或关闭写操作。
-
适用场景:检测对端关闭。
-
-
EPOLLPRI
-
有紧急数据可读。
-
适用场景:带外数据到达。
-
-
EPOLLERR
-
文件描述符发生错误。
-
适用场景:处理错误情况。
-
-
EPOLLHUP
-
文件描述符挂起。
-
适用场景:连接关闭或设备断开。
-
-
EPOLLET
-
启用边缘触发模式(默认水平触发)。
-
适用场景:高性能场景,需状态变化时处理。
-
-
EPOLLONESHOT
-
事件触发后禁用文件描述符,需重新注册。
-
适用场景:确保事件只被一个线程处理。
-
-
EPOLLWAKEUP (since Linux 3.5)
-
防止系统休眠,直到事件处理完毕。
-
适用场景:需防止系统休眠时。
-
-
EPOLLEXCLUSIVE (since Linux 4.5)
-
避免惊群效应,多个 epoll 实例中只有一个唤醒。
-
适用场景:多线程/进程监听同一文件描述符。
-