Linux FD 向用户公开等待

Linux FD expose to user for waiting

提问人:Lars M. 提问时间:12/30/2017 最后编辑:Eric HauensteinLars M. 更新时间:1/14/2018 访问量:249

问:

想象一下,有一个库可以启动服务器套接字并管理所有客户端的 epoll fd。由于一切都应该是非阻塞的,因此控制权被传递给用户,该用户可能希望在不同的 fds 上进行选择,包括通知库的 fds。

目前,用户指定回调。然后,用户可以调用服务例程来评估 epoll 并调用这些回调,以避免不断调用服务例程,而是执行用户可能希望在 epoll fd 上等待的其他操作。

在不暴露 epoll fd 的情况下向用户公开 fd 的正确方法是什么?对我来说,更好的解决方案是创建第二个只读文件描述符,如果 epoll 变得可读,它就会变得可读。这可能吗?

我知道使用服务线程的可能解决方案,但我更希望我能在不增加同步复杂性的情况下做到这一点。

另一个可能的解决方案是 eventfd 和一个线程,该线程轮询 epoll fd 然后触发 eventfd。但这似乎太过分了。

Linux 事件 select file-descriptor epoll

评论

0赞 Oleg Kuralenko 1/17/2018
它是供内部使用的特定有限应用程序集的库,还是要在某处发布的通用库?
0赞 Lars M. 1/17/2018
虽然它的开发是由于一个私人项目而启动的,但当它完成并且很好时,它将公开可用。但是,我看不出这与这个问题有什么关系,因为无论如何,我更喜欢干净的解决方案而不是“不访问”协议。
0赞 amine.ahd 1/19/2018
您是否考虑过使用管道并将一端传递给用户进行写入或读取?
0赞 Maquefel 1/20/2018
我假设您的应用程序是多线程的,一个用于库,一个用于每个客户端?任务的描述看起来像某种多点总线解复用器。
0赞 Lars M. 1/21/2018
我想避免库的服务线程。我已经提到了这种可能性。

答: 暂无答案