Provided by: manpages-es_1.55-10_all bug

NOMBRE

       unix,  PF_UNIX,  AF_UNIX, PF_LOCAL, AF_LOCAL - Conectores para la comunicación 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Ó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.

       Los tipos válidos son SOCK_STREAM para un conector orientado a conexión 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 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 */
              };

       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 módulo del  protocolo  Unix.   La
       dirección  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  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 */
              };

       El  núcleo  comprueba  las  credenciales  que  el  emisor  especifíca.  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 opción SO_PASSCRED debe estar activa en el conector.

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.

       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 más (usando unlink(2)).  Se aplica
       la  semántica  habitual  de  Unix detrás de una operación de cierre: el conector puede ser
       desligado en cualquier instante y será finalmente eliminado del sistema de ficheros cuando
       se cierre la última referecia a él.

       Para pasar descriptores de fichero o credenciales necesita enviar/leer al menos un byte de
       datos.

       Los conectores orientados a conexión del dominio Unix no  soportan  la  noción  de  "datos
       fuera de orden".

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.

       La capa de conectores genérica, o el sistema de ficheros al generar un objeto conector  en
       el  sistema de fichero, pueden producir otros errores. Vea las páginas de manual adecuadas
       para más información.

VÉASE TAMBIÉN

       recvmsg(2), sendmsg(2), socket(2), socketpair(2), cmsg(3), capabilities(7), socket(7)