是否有一个与eventfd相当的Windows?

我正在编写一个模拟套接字行为的跨平台库,在(App-> mylib->套接字)之间具有附加function。

我希望它对程序员来说是最透明的,所以像select和poll这样的原语必须和这个lib一起工作

问题是当数据在真实套接字中变得可用时,它将不得不经过大量的处理,所以如果select指向真正的套接字fd,应用程序将被阻塞很多时间。 我希望select / poll只在数据准备好被使用时解锁(在我的lib完成所有处理之后)。

所以我遇到了这个eventfd ,它允许我做我想要的东西,即操纵给定fd上的select / poll行为

由于我对Linux环境更熟悉,我不知道eventfd的窗口是什么 。 试图寻找,但没有运气。

注意:其他方法是使用与接口连接的另一个套接字,但似乎有这么多的开销。 使用所有数据进行系统调用,只是因为windows没有这个function。

或者我可以实现自己的select,重新发明轮子。 = /

空无一人。 eventfd是Linux特有的功能,甚至在其他UNIXy操作系统(如BSD和Mac OS X)上都没有。

是的,但是很可笑。 您可以创建一个分层服务提供程序(全局安装…),以处理系统的网络堆栈。 你可以自己实现所有的WinSock2函数,并将其大部分转发到底层的TCP。 这通常被防火墙或防病毒程序用来将自己插入到堆栈中,并查看正在发生的事情。

在你的情况下,你会想要使用一个ioctl为你的应用程序打开“特殊”的行为。 每当应用程序尝试创建一个套接字,它将被转发到您的函数,从而打开一个真正的TCP套接字(说)。 虽然不是返回HANDLE,而是使用WinSock函数来创建内核中的虚拟句柄,然后将其提供给应用程序。 你在一个线程中做你的东西。 然后,当应用程序在虚拟手柄上调用WinSock函数时,它们最终会在读取,选择等操作中实现。您可以将虚拟手柄上的选择通知与实际手柄上的选择通知分开。 这可以让你做一些事情,例如,透明地给一个应用程序一个套接字,这个套接字以加密的方式封装数据,与原来的套接字没有区别。 (几乎没有区别!您可以调用句柄上的一些LSP API来查看是否有实际的和基本的句柄,您没有给。

相当重的,在某些方面可怕的。 但是,它在那里…希望这是一个有用的概述。