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.