有人知道 MAC OS X 的 NETLINK Sockets API 等效吗?
Posted
技术标签:
【中文标题】有人知道 MAC OS X 的 NETLINK Sockets API 等效吗?【英文标题】:Does anybody know equivalent for NETLINK Sockets API for MAC OS X? 【发布时间】:2011-05-28 19:01:17 【问题描述】:有没有人知道 NETLINK Sockets API for MAC OS X 的等价物? 我正在尝试将 Linux 应用程序移植到 MAC OS X,但我在 MACOS 中找不到类似的东西。
我需要在我的应用程序中提供对网络适配器的异步访问。
每隔一定的秒数轮询网络适配器关于配置更改等对我来说不是方便的解决方案。 NETLINK Socket API 让我只有在发生有趣的事情时才会收到通知。
我知道 NETLINK 是 Linux 特定的东西,用于在 Linux 内核和用户空间之间进行通信,但在 MACOS 下可能存在类似 NETLINK 的东西。
我看到了与内核通信的唯一工具——sysctl()
有人知道吗?
【问题讨论】:
【参考方案1】:您可以使用kernel control architecture,它记录在 OSX 为此提供的文档的 NKE 部分中。
【讨论】:
【参考方案2】:执行此操作的传统方式是使用 select/poll/epoll/kqueue 等待套接字上的事件。请参阅此答案以了解在什么平台上最好:select vs poll vs epoll。
或者,为每个连接生成一个新线程并使用阻塞套接字读取。然而,历史告诉我们,这比通过 select/poll/kqueue 的非阻塞 I/O 更难扩展。这是 1990 年代大多数人最初编写网络服务器的方式。根据您的编码风格,阻塞 I/O + 线程可能更容易使用。
注意,与它的名字相反,epoll 不是轮询。
【讨论】:
我不是在谈论监听套接字以及从套接字发送和接收数据。我说的是使用 NETLINK 套接字 API 获取网络适配器设置和配置数据。 Netlink 是一种类似套接字的机制,用于内核和用户空间进程之间的 IPC,以及单独的用户空间进程(如 unix 套接字)或多个用户空间和内核空间进程的混合。我的调查显示没有适用于 mac os x 的 NETLINK API。我正在寻找某种替代品。附: epoll() 系统调用在 MAC OS X 8-) 中不存在以上是关于有人知道 MAC OS X 的 NETLINK Sockets API 等效吗?的主要内容,如果未能解决你的问题,请参考以下文章
Mac OS X 休眠模式杂谈 | 领客专栏·Mac 玩儿法
Ruby gem rmagick 不会安装在 Mac OS X 上
Mac OS X >= 10.6 上的 Finder 文件图标标记(图标覆盖)