Linux init socket local con ‘@’

imagenes

Tengo experiencia con el uso de sockets locales con nombre y de red en C, pero en Linux (Fedora 14), usando el monitor del sistema GNOME, observo que un socket local, está siendo utilizado por en eso proceso, tiene el camino "@ / com / ubuntu / upstart". Una cosa que observo es que este camino (sin el ‘@’) no existe, pero tampoco tengo idea de lo que significa el ‘@’. No he visto esto en ningún otro lugar.

Algunas investigaciones me dicen que la en eso El demonio ‘upstart’ es una introducción bastante reciente a Linux, presumiblemente reemplazando a otro demonio más antiguo. Está alojado en un subdominio del sitio web de Ubuntu, por lo que siento una conexión en ese sentido, pero ¿qué significa “@”? ¿Y por qué un camino inexistente lo sigue?

Gracias


Tenemos varias respuestas

La mejor respuesta:

Lo que estás viendo es un zócalo abstracto, Un tipo especial de socket específico para Linux. Desde hombre 7 unix:

   * resumen: una dirección de socket abstracta se distingue por el hecho de que
      sun_path [0] es un byte nulo ('\ 0'). La dirección del socket en este espacio de nombres.
      viene dado por los bytes adicionales en sun_path que están cubiertos por el
      Longitud especificada de la estructura de la dirección. (Los bytes nulos en el nombre no tienen
      significado especial.) El nombre no tiene conexión con el sistema de archivos
      nombres de ruta. Cuando la dirección de un socket abstracto es devuelta por
      getsockname (2), getpeername (2), y accept (2), el addrlen devuelto es
      mayor que sizeof (sa_family_t) (es decir, mayor que 2), y el nombre de
      el socket está contenido en los primeros bytes (addrlen - sizeof (sa_family_t))
      de sun_path. El espacio de nombres del socket abstracto es un Linux no portátil.
      extensión.

Si bien esto no se menciona, los nombres de socket abstractos se imprimen con el primer carácter @ en lugar del byte nulo, como se usa en bind () etc.

Como se menciona en la página del manual, la cadena después del @ o el byte nulo no es una ruta del sistema de archivos, y puede ser cualquier cosa. En su caso, está estructurado como una ruta por razones organizativas (para evitar conflictos con otros sockets abstractos).


Otra respuesta


Fuente

Leave a Reply