Provided by:
manpages-es_1.55-10_all 
NOMBRE
unix, PF_UNIX, AF_UNIX, PF_LOCAL, AF_LOCAL - Conectores para la
comunicacion local entre procesos.
SINOPSIS
#include <sys/socket.h>
#include <sys/un.h>
unix_socket = socket(PF_UNIX, type, 0);
error = socketpair(PF_UNIX, type, 0, int *sv);
DESCRIPCI'ON
La familia de conectores PF_UNIX (tambien conocida como PF_LOCAL) se
usa para comunicar procesos en la misma maquina de manera eficiente.
Los conectores Unix pueden ser o bien anonimos (creados mediante
socketpair(2)) o bien estar asociados con un fichero de tipo conector.
Linux tambien soporta un espacio de nombres abstracto que es
independiente del sistema de ficheros.
Los tipos validos son SOCK_STREAM para un conector orientado a conexion
y SOCK_DGRAM para un conector orientado a datagramas que conserva las
fronteras entre los mensajes. Los conectores Unix siempre son fiables y
no reordenan los datragramas.
Los conectores Unix soportan el paso de descriptores de fichero o
credenciales de proceso a otros procesos, usando datos auxiliares.
FORMATO DE LAS DIRECCIONES
Una direccion Unix se define como un nombre de fichero en el sistema de
fichero o como una cadena unica en el espacio de nombres abstracto. Los
conectores creados mediante socketpair(2) son anonimos. Para conectores
no anonimos la direccion del destino se puede configurar usando
connect(2). La direccion local se puede configurar usando bind(2).
Cuando un conector se conecta y no tiene todavia una direccion local,
se genera automaticamente una direccion unica 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 */
};
sun_family siempre contiene AF_UNIX. sun_path contiene el nombre de
ruta (terminado en cero) del conector en el sistema de ficheros. Si
sun_path comienza con un byte cero se refiere al espacio de nombres
abstracto mantenido por el modulo del protocolo Unix. La direccion del
conector en este espacio de nombres viene dada por el resto de los
bytes en sun_path. Dese cuenta que los nombres en el espacio de
nombres abstracto no terminan en cero.
OPCIONES DE LOS CONECTORES
Por razones historicas estas opciones de los conectores se especifican
con un tipo SOL_SOCKET, aunque sean especificas 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 recepcion de las credenciales del proceso emisor en
un mensaje auxiliar. Cuando esta opcion esta activa y el
conector no esta conectado aun, se genera automaticamente un
nombre unico en el espacio de nombres abstracto. Espera una
bandera booleana entera.
MENSAJES AUXILIARES
Los datos auxiliares se envian y reciben usando sendmsg(2) y
recvmsg(2). Por razones historicas, estos los tipos de mensajes
auxiliares listados arriba se especifican con un tipo SOL_SOCKET,
aunque son especificos 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 mas informacion, 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
autenticacion. 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 */
};
El nucleo comprueba las credenciales que el emisor especifica. Un
proceso con identificador de usuario efectivo 0 puede especificar
valores que no coincidan con los suyos. El emisor debe especificar su
propio identificador de proceso (a menos que posea la capacidad
CAP_SYS_ADMIN), sus identificador de usuario, identificador de usuario
efectivo o identificador de usuario de conjunto (a menos que posea la
capacidad CAP_SETUID) y sus identificador de grupo, identificador de
grupo efectivo o identificador de grupo de conjunto (a menos que posea
la capacidad CAP_SETGID). Para recibir un mensaje struct ucred la
opcion SO_PASSCRED debe estar activa en el conector.
VERSIONES
SCM_CREDENTIALS y el espacio de nombres abstracto fueron introducidos
en la version 2.2 de Linux y no deberian usarse en programas
transportables. (Algunos sistemas derivados de BSD tambien soportan el
paso de credenciales, pero los detalles de implementacion difieren.)
OBSERVACIONES
En la implementacion de Linux, los conectores que son visibles en el
sistema de ficheros respetan los permisos del directorio en el que
estan. Se pueden cambiar sus propietarios, grupos y permisos. La
creacion de un nuevo conector fallara si el proceso no tiene permisos
de escritura y busqueda (ejecucion) en el directorio en el que se crea
el conector. La conexion 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 deberian confiar en esta
caracteristica.
Ligar un conector con un nombre de fichero crea un conector en el
sistema de ficheros que debe ser borrado por el invocador cuando no se
necesite mas (usando unlink(2)). Se aplica la semantica habitual de
Unix detras de una operacion de cierre: el conector puede ser desligado
en cualquier instante y sera finalmente eliminado del sistema de
ficheros cuando se cierre la ultima referecia a el.
Para pasar descriptores de fichero o credenciales necesita enviar/leer
al menos un byte de datos.
Los conectores orientados a conexion del dominio Unix no soportan la
nocion de "datos fuera de orden".
ERRORES
ENOMEM No hay suficiente memoria.
ECONNREFUSED
Se ha llamado a connect(2) con un objeto conector que no esta
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 invalido. Una causa comun es olvidar
asignar AF_UNIX al campo sun_type de las direcciones pasadas o
que el conector se encuentre en un estado invalido para la
operacion aplicada.
EOPNOTSUPP
Se ha invocado una operacion orientada a conexion sobre un
conector no orientado a conexion o se ha intentado usar la
opcion 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 direccion local seleccionada ya esta 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 direccion de destino en un conector
conectado.
ENOTCONN
La operacion del conector necesita una direccion de destino pero
el conector no esta conectado.
ECONNRESET
Se ha cerrado inesperadamente el conector remoto.
EPIPE Se ha cerrado el conector remoto de un conector orientado a
conexion. Si se ha activado, tambien se enviara una senal
SIGPIPE. Esto se puede evitar pasando la opcion MSG_NOSIGNAL a
sendmsg(2) o a recvmsg(2).
EFAULT La direccion de memoria de usuario no es valida.
EPERM El emisor ha pasado credenciales invalidas en struct ucred.
La capa de conectores generica, o el sistema de ficheros al generar un
objeto conector en el sistema de fichero, pueden producir otros
errores. Vea las paginas de manual adecuadas para mas informacion.
V'EASE TAMBI'EN
recvmsg(2), sendmsg(2), socket(2), socketpair(2), cmsg(3),
capabilities(7), socket(7)
Pagina man de Linux 2 diciembre 2002 UNIX(7)