other languages
other sections
UNIX(7) | Manual del Programador de Linux | UNIX(7) |
NOMBRE¶
unix, PF_UNIX, AF_UNIX, PF_LOCAL, AF_LOCAL - Conectores para la comunicación local entre procesos.SINOPSIS¶
#include <sys/socket.h>DESCRIPCIÓN¶
La familia de conectores PF_UNIX (también conocida como PF_LOCAL) se usa para comunicar procesos en la misma máquina de manera eficiente. Los conectores Unix pueden ser o bien anónimos (creados mediante socketpair(2)) o bien estar asociados con un fichero de tipo conector. Linux también soporta un espacio de nombres abstracto que es independiente del sistema de ficheros.FORMATO DE LAS DIRECCIONES¶
Una dirección Unix se define como un nombre de fichero en el sistema de fichero o como una cadena única en el espacio de nombres abstracto. Los conectores creados mediante socketpair(2) son anónimos. Para conectores no anónimos la dirección del destino se puede configurar usando connect(2). La dirección local se puede configurar usando bind(2). Cuando un conector se conecta y no tiene todavía una dirección local, se genera automáticamente una dirección única en el espacio de nombres abstracto.#define UNIX_PATH_MAX 108 struct sockaddr_un { sa_family_t sun_family; /* AF_UNIX */ char sun_path[UNIX_PATH_MAX]; /* nombre de la ruta */ };
OPCIONES DE LOS CONECTORES¶
Por razones históricas estas opciones de los conectores se especifican con un tipo SOL_SOCKET, aunque sean específicas de PF_UNIX. Se pueden configurar con setsockopt(2) y leer con getsockopt(2) especificando SOL_SOCKET como familia del conector.- SO_PASSCRED
- Habilita la recepción de las credenciales del proceso
emisor en un mensaje auxiliar. Cuando esta opción está activa y
el conector no está conectado aún, se genera
automáticamente un nombre único en el espacio de nombres
abstracto. Espera una bandera booleana entera.
MENSAJES AUXILIARES¶
Los datos auxiliares se envían y reciben usando sendmsg(2) y recvmsg(2). Por razones históricas, estos los tipos de mensajes auxiliares listados arriba se especifican con un tipo SOL_SOCKET, aunque son específicos de PF_UNIX. Para enviarlos, asigne al campo cmsg_level de la estructura cmsghdr el valor SOL_SOCKET y al campo cmsg_type el tipo. Para más información, vea cmsg(3).- SCM_RIGHTS
- Enviar o recibir un conjunto de descriptores de fichero
abiertos a/desde otro proceso. La parte de datos contiene un array de
enteros con los descriptores de fichero. Los descriptores de fichero
pasados se comportan como si hubieran sido creados con dup(2).
- SCM_CREDENTIALS
- Enviar o recibir credenciales Unix. Esto se puede usar para
autenticación. Las credenciales se pasan como un mensaje auxiliar
struct ucred.
struct ucred { pid_t pid; /* PID del proceso emisor */ uid_t uid; /* UID del proceso emisor */ gid_t gid; /* GID del proceso emisor */ };
VERSIONES¶
SCM_CREDENTIALS y el espacio de nombres abstracto fueron introducidos en la versión 2.2 de Linux y no deberían usarse en programas transportables. (Algunos sistemas derivados de BSD también soportan el paso de credenciales, pero los detalles de implementación difieren.)OBSERVACIONES¶
En la implementación de Linux, los conectores que son visibles en el sistema de ficheros respetan los permisos del directorio en el que están. Se pueden cambiar sus propietarios, grupos y permisos. La creación de un nuevo conector fallará si el proceso no tiene permisos de escritura y búsqueda (ejecución) en el directorio en el que se crea el conector. La conexión al objeto conector requiere permiso de lectura/escritura. Este comportamiento difiere del de muchos sistemas derivados de BSD que ignoran los permisos para los conectores Unix. Por seguridad, los programas transportables no deberían confiar en esta característica.ERRORES¶
- ENOMEM
- No hay suficiente memoria.
- ECONNREFUSED
- Se ha llamado a connect(2) con un objeto conector que no está escuchando. Esto puede ocurrir cuando no existe el conector remoto o el nombre de fichero no es un conector.
- EINVAL
- Se ha pasado un argumento inválido. Una causa común es olvidar asignar AF_UNIX al campo sun_type de las direcciones pasadas o que el conector se encuentre en un estado inválido para la operación aplicada.
- EOPNOTSUPP
- Se ha invocado una operación orientada a conexión sobre un conector no orientado a conexión o se ha intentado usar la opción de "datos fuera de orden".
- EPROTONOSUPPORT
- El protocolo pasado no es PF_UNIX.
- ESOCKTNOSUPPORT
- Tipo de conector desconocido.
- EPROTOTYPE
- El tipo del conector remoto no coincide con el tipo del conector local (SOCK_DGRAM contra SOCK_STREAM)
- EADDRINUSE
- La dirección local seleccionada ya está en uso o el objeto conector del sistema de ficheros ya existe.
- EISCONN
- Se ha llamado a connect(2) sobre un conector ya conectado o se ha especificado una dirección de destino en un conector conectado.
- ENOTCONN
- La operación del conector necesita una dirección de destino pero el conector no está conectado.
- ECONNRESET
- Se ha cerrado inesperadamente el conector remoto.
- EPIPE
- Se ha cerrado el conector remoto de un conector orientado a conexión. Si se ha activado, también se enviará una señal SIGPIPE. Esto se puede evitar pasando la opción MSG_NOSIGNAL a sendmsg(2) o a recvmsg(2).
- EFAULT
- La dirección de memoria de usuario no es válida.
- EPERM
- El emisor ha pasado credenciales inválidas en struct ucred.
VÉASE TAMBIÉN¶
recvmsg(2), sendmsg(2), socket(2), socketpair(2), cmsg(3), capabilities(7), socket(7)2 diciembre 2002 | Página man de Linux |