【问题标题】:Does anybody know equivalent for NETLINK Sockets API for MAC OS X?有人知道 MAC OS X 的 NETLINK Sockets API 等效吗?
【发布时间】: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()

有人知道吗?

【问题讨论】:

    标签: macos sockets kernel 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-) 中不存在
      猜你喜欢
      • 2010-11-29
      • 2010-09-05
      • 2011-03-28
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多