在使用epoll时,有时候send产生了eagain,此时需要注册out事件,为了能继续recv数据,也把in事件一起带上,代码为epoll_wait(fd,EPOLL_CTL_MOD,EPOLLIN|EPOLLOUT|EPOLLET|EPOLLONESHOT);在epoll_wait时,处理完out事件后,我发现in事件再也不会通知了,仿佛in事件和out事件变成了一体,只要out事件触发了,in事件也一起从epoll删除了。需要再次注册in,就正常的recv了
我在et模式并且使用oneshot方式时,EPOLLIN和EPOLLOUT是独立触发的吗?
我在et模式并且使用oneshot方式时,EPOLLIN和EPOLLOUT是独立触发的吗?
解决方案 »
- linux下共享内存怎么在不同的进程之间传送地址
- 请问在Linux下怎么用Java进行串口编程
- linux下多线程的问题
- Ubuntu16.04+LAMP部署nextcloud,访问IP/nextcloud,出现问题,求助!
- linux下被killed进程有没有办法恢复?
- centos7下solr导入数据出现Data Config problem: 1 字节的 UTF-8 序列的字节 1 无效
- Linux文件操作指令
- 重做CentOS系统后硬盘只剩下很少空间
- centOS7虚拟机为什么不能挂起
- 如何编译linux kernel时将设备树也一起编译
- kill命令不能杀死这个ssh连接进程,求助!
- linux可执行文件反推code文件
No
2. 建议使用不要使用EPOLLET
如果采用ET模式,那么仅当状态发生变化时才会通知,而采用LT模式类似于原来的select/poll操作,只要还有没有处理的事件就会一直通知.
建议楼主试试水平触发。man epoll 里有关触发(Edge-Triggered)和水平触发(Level-Triggered)的不同,有详细的说明.