2010-12-21 6 views
5

¿Alguien sabe equivalente a NETLINK Sockets API para MAC OS X? Estoy tratando de portar la aplicación Linux a MAC OS X y no pude encontrar nada similar en MACOS.¿Alguien sabe equivalente a NETLINK Sockets API para MAC OS X?

Necesito proporcionar acceso asincrónico al adaptador de red en mi aplicación.

Adaptador de red de sondeo sobre cambios de configuración, etc. cada cierta cantidad de segundos no es una solución conveniente para mí. NETLINK Socket API juego para recibir notificaciones solo cuando ocurre algo interesante.

Sé que NETLINK es algo específico de Linux para comunicarse entre el kernel de Linux y el espacio de usuario, pero tal vez exista algo como NETLINK bajo MACOS.

veo el la única herramienta para comunicarse con el núcleo - sysctl()

¿Alguien tiene alguna información?

Respuesta

2

Puede usar el kernel control architecture que está documentado en la sección NKE de sus documentos que OSX proporciona por ese motivo.

+6

habla ofensiva no se tolera en SO. Edité tu pregunta para eliminar la parte ofensiva. Si insiste, terminará siendo eliminado. – jweyrich

-3

La forma tradicional de hacer esto es esperar eventos en el socket usando select/poll/epoll/kqueue. Consulte esta respuesta para saber qué es mejor en qué plataforma: select vs poll vs epoll.

O bien, genere un nuevo hilo para cada conexión y use las lecturas de los bloques de bloqueo. Sin embargo, la historia nos ha enseñado que esto es menos escalable que las E/S sin bloqueo a través de select/poll/kqueue. Esta era la forma en que la mayoría de las personas escribía originalmente servidores de red en la década de 1990. Dependiendo de su estilo de codificación, es más fácil trabajar con el bloqueo de E/S + subprocesos.

Tenga en cuenta que, al contrario de su nombre, epoll no es un sondeo.

+0

No estoy hablando de escuchar el socket y enviar y recibir datos del socket. Estoy hablando de obtener configuraciones de adaptadores de red y datos de configuración mediante el uso de la API de socket NETLINK. Netlink es un mecanismo tipo socket para IPC entre los procesos de núcleo y espacio de usuario, así como entre los procesos de espacio de usuario solos (como, por ejemplo, sockets Unix) o una mezcla de espacio de usuario múltiple y procesos de espacio de kernel. Mi investigación me muestra que no hay NETLINK API para mac os x. Estoy buscando algún tipo de sustituto para eso. P.S. La llamada al sistema epoll() no existe en MAC OS X 8-) – Vlad