Кто-нибудь знает эквивалент для NETLINK Sockets API для MAC OS X? - PullRequest
5 голосов
/ 21 декабря 2010

Кто-нибудь знает эквивалент для NETLINK Sockets API для MAC OS X?Я пытаюсь портировать приложение Linux на MAC OS X и не могу найти ничего похожего в MACOS.

Мне нужно предоставить асинхронный доступ к сетевому адаптеру в моем приложении.

Опрос сетевого адаптера об изменениях конфигурации и т. Д. Каждое определенное количество секунд не является для меня удобным решением.Игра NETLINK Socket API - это способ получать уведомления только тогда, когда происходит что-то интересное.

Я знаю, что NETLINK - это специфическая для Linux вещь для связи между ядром Linux и пространством пользователя, но, возможно, в MACOS существует что-то вроде NETLINK.

Я вижу единственный инструмент для связи с ядром- sysctl ()

У кого-нибудь есть информация?

Ответы [ 2 ]

2 голосов
/ 08 января 2011

Вы можете использовать архитектуру управления ядром , которая описана в разделе NKE их документов, которые OSX предоставляет по этой причине.

0 голосов
/ 21 декабря 2010

Традиционный способ сделать это - дождаться событий в сокете, используя select / poll / epoll / kqueue.Посмотрите этот ответ, чтобы узнать, что лучше всего на какой платформе: выберите против опроса против epoll .

В качестве альтернативы, создайте новый поток для каждого соединения и используйте блокировку чтения сокетов.Тем не менее, история научила нас, что это менее масштабируемо, чем неблокирующий ввод / вывод через select / poll / kqueue.Именно так большинство людей изначально писали о сетевых серверах в 1990-х годах.В зависимости от вашего стиля кодирования, с блокировкой потоков ввода-вывода + может быть проще работать.

Обратите внимание, что вопреки своему названию, epoll не опрашивает.

...