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

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)