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

NOMBRE

       socket - crea un extremo de una comunicación

SINOPSIS

       #include <sys/types.h>
       #include <sys/socket.h>

       int socket(int dominio, int tipo, int protocolo);

DESCRIPCIÓN

       Socket crea un extremo de una comunicación y devuelve un descriptor.

       El  parámetro dominio especifica un dominio de comunicaciones. Esto selecciona la familia de protocol que
       se usará para la comunicación. Estas familias se definen en  <sys/socket.h>.   Los  formatos  actualmente
       reconocidos incluyen:

       Nombre             Propósito                         Página de manual
       PF_UNIX,PF_LOCAL   Comunicación local                unix(7)
       PF_INET            Protocolos de Internet IPv4       ip(7)
       PF_INET6           Protocolos de Internet IPv6
       PF_IPX             Protocolos IPX - Novell
       PF_NETLINK         Dispositivo  de  la  intefaz de   netlink(7)
                          usuario del núcleo
       PF_X25             Protocolo ITU-T X.25 / ISO-8208   x25(7)
       PF_AX25            Protocolo AX.25 de  radio  para
                          aficionados
       PF_ATMPVC          Acceso directo a PVCs ATM
       PF_APPLETALK       Appletalk                         ddp(7)
       PF_PACKET          Interfaz  de  paquetes  de bajo   packet(7)
                          nivel

       El conector tiene el tipo indicado, que especifica la semántica de la comunicación. Los  tipos  definidos
       en la actualidad son:

       SOCK_STREAM
              Proporciona flujos de bytes basados en una conexión bidireccional secuenciada, confiable. Se puede
              admitir un mecanismo de transmisión de datos fuera-de-banda.

       SOCK_DGRAM
              Admite datagramas (mensajes no confiables, sin conexión, de una longitud máxima fija).

       SOCK_SEQPACKET
              Proporciona  un  camino  de  transmisión  de  datos  basado en conexión bidireccional secuenciado,
              confiable, para datagramas de longitud máxima fija; se requiere un consumidor para leer un paquete
              entero con cada llamada al sistema de lectura.

       SOCK_RAW
              Proporciona acceso directo a los protocolos de red.

       SOCK_RDM
              Proporciona una capa de datagramas fiables que no garantiza el orden.

       SOCK_PACKET
              Obsoleto y no debería utilizarse en programas nuevos. Vea packet(7).

       Algunos tipos de conectores pueden no ser  implementados  por  todas  las  familias  de  protocolos.  Por
       ejemplo, SOCK_SEQPACKET no está implementado para AF_INET.

       El  protocolo  especifica un protocolo particular para ser usado con el conector. Normalmente sólo existe
       un protocolo que admita un tipo particular de conector dentro de una familia de protocolos dada, en  cuyo
       caso  protocolo  se  puede  especificar  como  0.   Sin  embargo,  es  posible  que puedan existir varios
       protocolos, en cuyo caso un protocolo particular  puede  especificarse  de  esta  manera.  El  número  de
       protocolo  a  emplear  es  específico  al  “dominio de comunicación” en el que la comunicación va a tener
       lugar; vea protocols(5).  Consulte getprotoent(3) para ver cómo asociar una cadenas con el nombre  de  un
       protocolo a un número de protocolo.

       Los  conectores  del  tipo  SOCK_STREAM son flujos de bytes bidireccionales, similares a tuberías, que no
       conservan los límites de registro. Un conector de flujo debe estar en un estado conectado  antes  de  que
       cualquier  dato  pueda  ser  enviado o recibido en él. Se crea una conexión con otro conector mediante la
       llamada connect(2).  Una vez hecha la conexión, los datos pueden transferirse utilizando llamadas read(2)
       y write(2) o alguna variante de las llamadas send(2) y recv(2).  Cuando una sesión se ha  completado,  se
       puede  efectuar  un  close(2).   Los datos fuera-de-banda pueden transmitirse también como se describe en
       send(2) y recibirse según se describe en recv(2).

       Los protocolos de comunicaciones que implementan un SOCK_STREAM aseguran que los datos no se  pierden  ni
       se  duplican.  Si un trozo de dato para el cual el protocolo de la pareja tiene espacio de búfer no puede
       ser transmitido satisfactoriamente en un período razonable de tiempo, entonces la conexión  se  considera
       muerta.  Cuando se activa SO_KEEPALIVE en el conector el protocolo comprueba de una manera específica del
       protocolo si el otro extremo todavía está vivo. Se lanza una señal SIGPIPE si un proceso envía  o  recibe
       en  un  flujo  roto;  esto provoca que procesos simples, que no manejan la señal, acaben.  Los conectores
       SOCK_SEQPACKET emplean las mismas llamadas al sistema que los SOCK_STREAM.  La única  diferencia  es  que
       las  llamadas a read(2) devolverán solamente la cantidad de datos pedidos, y los que queden en el paquete
       que llega se perderán. También se conservarán todos los límites de mensaje en los datagramas que lleguen.

       Los conectores SOCK_DGRAM y SOCK_RAW permiten el envío de datagramas a los correspondientes nombrados  en
       llamadas  a  send(2).   Los datagramas se reciben generalmente con recvfrom(2), que devuelve el siguiente
       datagrama con su dirección de retorno.

       SOCK_PACKET es un tipo de conector obsoleto para recibir paquetes crudos directamente desde el  manejador
       de dispositivo. Use packet(7) en su lugar.

       Una  llamada  a  fcntl(2)  con  el  argumento  F_SETOWN puede utilizarse para especificar que un grupo de
       proceso reciba una señal SIGURG cuando lleguen los datos fuera-de-banda o la  señal  SIGPIPE  cuando  una
       conexión SOCK_STREAM se rompa inesperadamente. También puede usarse para configurar el proceso o grupo de
       procesos  que recibirán la E/S y la notificación asíncrona de los eventos de E/S a través de SIGIO.  Usar
       F_SETOWN es equivalente a una llamada a ioctl(2) con el argumento FIOSETOWN o SIOCSPGRP.

       Cuando la red señala una condición de error al módulo del protocolo (por ejemplo, usando un mensaje  ICMP
       para  IP)  se  activa  la  bandera  de error pendiente para el conector. La siguiente operación sobre ese
       conector devolverá el código de error del error pendiente. Para algunos protocolos es  posible  habilitar
       una cola de error por conector para obtener información detallada del error. Vea IP_RECVERR en ip(7).

       La operación de los conectores se controla por opciones en el nivel de los conectores.  Estas opciones se
       definen  en  <sys/socket.h>.   Las  funciones  setsockopt(2) y getsockopt(2) se emplean para establecer y
       obtener opciones, respectivamente.

VALOR DEVUELTO

       Se devuelve un -1 si ocurre un error; en otro caso el valor devuelto es un descriptor para referenciar el
       conector.

ERRORES

       EPROTONOSUPPORT
              El tipo de protocolo, o el protocolo especificado, no es reconocido dentro de este dominio.

       EAFNOSUPPORT
              La implementación no soporta la familia de direcciones especificada.

       ENFILE No hay suficiente memoria en el núcleo para reservar una nueva estructura de conector.

       EMFILE Se ha desbordado la tabla de ficheros del proceso.

       EACCES Se deniega el permiso para crear un conector del tipo o protocolo especificado.

       ENOBUFS  o  ENOMEM
              No hay suficiente memoria disponible. El conector no puede crearse hasta que no queden libres  los
              recursos suficientes.

       EINVAL Protocolo desconocido o familia de protocolo no disponible.

       Los módulos de los protocolos subyacentes pueden generar otros errores.

CONFORME A

       4.4BSD (la llamada a función socket apareció en 4.2BSD). Generalmente transportable a o desde sistemas no
       BSD que admitan clones de la capa de conectores de BSD (incluyendo variantes System V).

NOTA

       Las  constantes  evidentes  usadas en BSD 4.* para las familias de protocolos son PF_UNIX, PF_INET, etc.,
       mientras que AF_UNIX, etc. se usan para las familias de direcciones. Sin embargo, ya la página de  manual
       BSD  promete:  "La  familia  de  protocolos generalmente es la misma que la familia de direcciones" y los
       estándares subsiguientes usan AF_* en todas partes.

FALLOS

       SOCK_UUCP todavía no está implementado.

VÉASE TAMBIÉN

       accept(2),  bind(2),  connect(2),  fcntl(2),  getpeername(2),  getsockname(2),  getsockopt(2),  ioctl(2),
       listen(2),  read(2),  recv(2),  select(2), send(2), shutdown(2), socketpair(2), write(2), getprotoent(3),
       ip(7), socket(7), tcp(7), udp(7), unix(7)

       “An Introductory 4.3 BSD  Interprocess  Communication  Tutorial”  está  reimpreso  en  UNIX  Programmer's
       Supplementary Documents Volume 1.

       “BSD  Interprocess  Communication  Tutorial”  está reimpreso en UNIX Programmer's Supplementary Documents
       Volume 1.

Página man de Linux                               24 abril 1999                                        SOCKET(2)