FIFO 遇到EPOLLHUP 问题

本文介绍了在项目中遇到的EPOLLHUP问题,问题源于后台进程通过FIFO接收前台事件,当所有前台进程关闭FIFO写端后,后台epoll持续收到EPOLLHUP事件。解决方案是后台进程也打开FIFO的写端,创建一个哑句柄,以防止EPOLLHUP事件的发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 最近在项目中遇到一个 EPOLLHUP的问题:

场景类似这样:一个后台进程通过FIFO接收前台的事件,并根据接收到的事件类型作具体处理;前台进程(多个)通过FIFO 传输一个int  数据通知后台进程需要处理的事件。

    在后台打开FIFO的读端,并通过epoll 对FIFO 的读事件 和多个socket 读写事件 检测。当FIFO可读时,读入一个int 数据,并根据值 调用对应的处理方法。


当所有的客户端都关闭,此时已经没有进程 持有FIFO的写端,此时epoll 会收到一个FIFO的EPOLLHUP事件。

因为没有对FIFO的EPOLLHUP事件 进行处理,所以在接下来的时间,epoll 会一直持续不断的收到FIFO的EPOLLHUP事件。


解决办法:

            经过查询UNP v2得知,epoll 收到FIFO的EPOLLHUP事件 是因为所有的客户端都关闭的FIFO的写端。

            并且UNP v2 给出了一个巧妙的解决办法,

            那就是在后台进程中 也打开一个FIFO的写端,并左右一个哑(dummy)句柄 弃之不用。

                


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值