我正在开发一个用于创建一对连接的 pts 的小型库。我使用epoll fd
,在其中我为事件注册了master fd
两个伪终端。EPOLLIN
当我的示例客户端程序启动时,事件循环处于空闲状态,因此当两个客户端(在我的情况下为 microcom)打开每个从站时。但是当任何客户端关闭它的从端时,它会epoll_wait
不断地为从端的主端报告EPOLLHUP
事件。
为了防止这种情况,我O_WRONLY
在每个从站上打开一个文件描述符,它可以工作(不再EPOLLHUP
),但我认为这更像是一个黑客而不是一个真正的解决方案...... Socat 似乎使用了一个忙碌的等待和一个小的睡眠在这个情况下。
我试图:
- 使用边缘触发行为
EPOLL_CTL_DEL
然后重新添加主生产 HUP 的
这些尝试都没有显示任何结果。
在 EPOLLHUP 发生之后,有没有办法清理“HUP 状态”并将主文件描述符恢复到从属打开之前的状态?