6

我正在开发一个用于创建一对连接的 pts 的小型库。我使用epoll fd,在其中我为事件注册了master fd两个伪终端。EPOLLIN当我的示例客户端程序启动时,事件循环处于空闲状态,因此当两个客户端(在我的情况下为 microcom)打开每个从站时。但是当任何客户端关闭它的从端时,它会epoll_wait不断地为从端的主端报告EPOLLHUP事件。

为了防止这种情况,我O_WRONLY在每个从站上打开一个文件描述符,它可以工作(不再EPOLLHUP),但我认为这更像是一个黑客而不是一个真正的解决方案...... Socat 似乎使用了一个忙碌的等待和一个小的睡眠在这个情况下。

我试图:

  • 使用边缘触发行为
  • EPOLL_CTL_DEL然后重新添加主生产 HUP 的

这些尝试都没有显示任何结果。

在 EPOLLHUP 发生之后,有没有办法清理“HUP 状态”并将主文件描述符恢复到从属打开之前的状态?

4

0 回答 0