epoll中的ET模式即边沿触发方式,在只有缓冲区从不可读到可读,从不可写到可写的转变下才会触发。
假想几种解决方式(均为ET模式下,触发EPOLLIN事件)
1.套接字描述符设置为阻塞
(1)从缓冲区读一次:此种情况下,如果一次没有从缓冲区中把数据读完,则再也不会触发EPOLLIN事件
(2)从缓冲区中一直读数据,直到没有数据可读为止,那么此时会陷入读数据阻塞状态
2.套接字描述符设置为非阻塞
解决办法:从缓冲区中一直读数据,直到触发EAGAIN错误为止,此时终止循环读数据,问题得以解决。
可以参考一下,虽然感觉也有点问题:https://blog.youkuaiyun.com/zxm342698145/article/details/80524331
epoll中的ET模式将套接字设置为非阻塞
最新推荐文章于 2024-04-10 11:57:38 发布