【发布时间】:2012-12-19 17:02:29
【问题描述】:
我正在编写一个模拟套接字行为的跨平台库,在两者之间(App->mylib->sockets)具有附加功能。
我希望它对程序员来说尽可能透明,所以像 select 和 poll 这样的原语必须与这个库相应地工作。
问题是当数据在真实套接字中变得可用时(例如),它必须经过大量处理,所以如果选择指向真实套接字fd,应用程序将被阻塞很多时间。我希望仅在准备好使用数据时(在我的库完成所有处理之后)解除阻塞。
所以我遇到了这个eventfd,它允许我做我想做的事,即操纵给定fd上的选择/轮询行为。
由于我对 Linux 环境比较熟悉,所以我不知道 windows 相当于 eventfd 是什么。尝试搜索但没有成功。
注意: 其他方法是使用与接口连接的另一个套接字,但这似乎开销很大。仅仅因为 windows 没有(看起来如此)这个功能而对所有数据进行系统调用。
或者我可以实现自己的选择,重新发明轮子。 =/
【问题讨论】:
-
Windows 只在 WinSock 中提供
select,这意味着它只在网络套接字上运行,而不是文件描述符。
标签: c windows events cross-platform select-function