在 Linux 高性能网络编程中,epoll 是无可争议的利器。而要真正用好 epoll,必须透彻理解两个核心事件(EPOLLIN、EPOLLOUT)以及两种工作模式(水平触发 LT、边缘触发 ET)。本文基于实际问答场景,系统地梳理这些概念,并澄清常见误区。
一、EPOLLIN 与 EPOLLOUT:可读与可写
epoll 通过事件通知应用程序:某个文件描述符(通常是 socket)已经准备好进行 I/O 操作。
| EPOLLIN | 接收缓冲区有数据可读 | • 收到新数据• 对端关闭连接(FIN)• 监听 socket 上有新连接• 发生错误 |
| EPOLLOUT | 发送缓冲区有空间可写 | • 刚添加描述符且缓冲区未满• 发送缓冲区从“满”变为“不满”• 非阻塞 connect() 成功 |
关键点




