Provided by: manpages-es_1.55-9_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)