Кто -нибудь знает эквивалент API Sockets Sockets Netlink для Mac OS X?
Вопрос
Кто -нибудь знает эквивалент API API Sockets NetLink для Mac OS X? Я пытаюсь портировать приложение Linux в Mac OS X и не мог найти что -то подобное в MacOS.
Мне нужно предоставить асинхронный доступ к сетевому адаптеру в моем приложении.
Адаптер избирательного сети о изменениях конфигурации и т. Д. Каждое определенное количество секунд для меня не является удобным решением. NetLink Socket API игра Me Way для получения уведомления только тогда, когда произошло что -то интересное.
Я знаю, что NetLink - это особенность Linux для связи между ядром Linux и пространством пользователя, но, возможно, существует что -то вроде NetLink под MacOS.
Я вижу единственный инструмент для связи с ядром - sysctl ()
У кого -нибудь есть информация?
Решение
Вы можете использовать Архитектура контроля ядра который задокументирован в разделе NKE их документов, которые OSX предоставляет по этой причине.
Другие советы
Традиционный способ сделать это состоит в том, чтобы дождаться событий в розетке, используя Select/опрос/Epoll/Kqueue. Смотрите этот ответ на то, что лучше на какой платформе: Выберите против опроса против Эполла.
В качестве альтернативы, создайте новый поток для каждого соединения и используйте блокирующие чтения. Тем не менее, история научила нас, что это менее масштабируемое, чем не блокирующий ввод-вывод через Select/опрос/kqueue. Это был способ, которым большинство людей изначально писали сетевые серверы в 1990 -х годах. В зависимости от вашего стиля кодирования, с блокировкой ввода/вывода + может быть легче работать.
Обратите внимание, что вопреки его названию, Epoll не избирает.