我正在研究small library for creating a pair of connected pts。我使用epoll fd
,其中我为master fd
事件的两个伪终端注册了EPOLLIN
。当我的示例客户端程序启动时,事件循环处于空闲状态,因此当两个客户端(在我的情况下为microcom)打开每个从属时。但是当任何客户端关闭它的从属端时,epoll_wait
会持续报告从属主服务器的EPOLLHUP
事件。
为了防止这种情况,我在每个奴隶上保持一个用O_WRONLY
打开的文件描述符,它可以工作(不再是EPOLLHUP
),但我认为这更像是一个黑客而不是一个真正的解决方案。 ..
在这种情况下,Socat似乎在忙碌的等待和小睡眠。
我试过:
EPOLL_CTL_DEL
然后重新添加生成HUP的主人这些尝试均未显示任何结果。
有没有办法清理“HUP状态”,并在EPOLLHUP发生后将主文件描述符放回到奴隶打开之前的状态?