socket

SOCKET(2)               Manual del Programador de Linux              SOCKET(2)



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)