Socket local de inicio de Linux con '@'

Socket local de inicio de Linux con '@'

Tengo experiencia con el uso de sockets de red y con nombre local en C, pero en Linux (Fedora 14), usando el monitor del sistema GNOME, noto que un socket local, utilizado por el initproceso, tiene la ruta "@/com/ubuntu/upstart". Una cosa que noto es que esta ruta (sin '@') no existe, pero tampoco tengo idea de qué significa '@'. No he visto esto en ningún otro lugar.

Algunas investigaciones me dicen que el initdemonio 'advenedizo' 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 la '@'? ¿Y por qué lo sigue un camino inexistente?

Gracias

Respuesta1

Lo que estás viendo es unenchufe abstracto, un tipo especial de socket específico de Linux. Dehombre 7 unix:

   *  abstract: an abstract socket address is distinguished by the fact that
      sun_path[0] is a null byte ('\0').  The socket's address in this namespace
      is given by the additional bytes in sun_path that are covered by the
      specified length of the address structure.  (Null bytes in the name have no
      special significance.)  The name has no connection with file system
      pathnames.  When the address of an abstract socket is returned by
      getsockname(2), getpeername(2), and accept(2), the returned addrlen is
      greater than sizeof(sa_family_t) (i.e., greater than 2), and the name of
      the socket is contained in the first (addrlen - sizeof(sa_family_t)) bytes
      of sun_path.  The abstract socket namespace is a nonportable Linux
      extension.

Si bien esto no se menciona, los nombres de sockets 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 de manual, la cadena después de @ 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 motivos organizativos (para evitar conflictos con otros sockets abstractos).

información relacionada