El @
probablemente indica un socket sostenido en un abstract namespace
que no pertenece a un archivo en el sistema de archivos.
Citando de La interfaz de programación de Linux por Michael Kerrisk:
57.6 El espacio de nombres de socket abstracto de Linux
El llamado espacio de nombres abstracto es una función específica de Linux que nos permite vincular un socket de dominio UNIX a un nombre sin que ese nombre se cree en el sistema de archivos. Esto proporciona algunas ventajas potenciales:
- No necesitamos preocuparnos por posibles colisiones con nombres existentes en el sistema de archivos.
- No es necesario desvincular la ruta del socket cuando hayamos terminado de usar el socket. El nombre abstracto se elimina automáticamente cuando se cierra el socket.
- No necesitamos crear un nombre de ruta del sistema de archivos para el socket. Esto puede ser útil en un entorno chroot, o si no tenemos acceso de escritura a un sistema de archivos.
Para crear un enlace abstracto, especificamos el primer byte de sun_path campo como un byte nulo (\0).[...]
Mostrando un null byte
inicial denotar ese tipo de socket puede ser difícil, por lo que tal vez esa sea la razón del @
inicial señal.
Según man 7 unix
- resumen:una dirección de socket abstracta se distingue por el hecho de que sun_path[0] es un byte nulo (
\0
). Todos los bytes restantes en sun_path definen el "nombre" del socket. (Los bytes nulos en el nombre no tienen un significado especial). El nombre no tiene conexión con las rutas del sistema de archivos. La dirección del socket en este espacio de nombres está dada por el resto de los bytes en sun_path. Cuando getsockname(2), getpeername(2) y accept(2) devuelven la dirección de un socket abstracto, su longitud es sizeof(struct sockaddr_un) y sun_path contiene el nombre abstracto. El espacio de nombres de socket abstracto es una extensión de Linux no portátil.
Parece que estos son 'abstractos', por lo que no hay una ruta real presente en el sistema de archivos