我们知道,可以将套接字放入到epoll中监听,当套接字上有事件发生时,epoll就会通知我们。epoll机制可以监听套接字上的以下6种事件:
- EPOLLIN:套接字可读
- EPOLLOUT:套接字可写
- EPOLLRDHUP:对端关闭了套接字,或者对端关闭了写
- EPOLLPRI:套接字上有紧急数据到达
- EPOLLHUP:对端挂断了套接字
那么,什么情况下会在套接字上触发以上6种事件呢?当我们监听套接字上的EPOLLIN + EPOLLRDHUP事件时,总结如下:
- 监听套接字上有连接到达时,监听套接字上将触发EPOLLIN(可读)事件;
- 连接套接字上有数据到达时,套接字上将触发EPOLLIN(可读)事件;
- 如果对端发送数据后立即关闭套接字或shutdown写,则本端在收到最后一个数据包时会触发EPOLLIN+EPOLLRDHUP事件;
- 对端按ctr+c杀死进程时,本端的套接字上将触发EPOLLIN+EPOLLRDHUP事件;