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

NOMBRE

       send, sendto, sendmsg - envía un mensaje de un conector (socket)

SINOPSIS

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

       ssize_t send(int s, const void *msg, size_t len, int flags);
       ssize_t  sendto(int  s,  const  void *msg, size_t len, int flags, const
       struct sockaddr *to, socklen_t tolen);
       ssize_t sendmsg(int s, const struct msghdr *msg, int flags);

DESCRIPCIÓN

       Send, sendto y sendmsg son utilizados para transmitir un mensaje a otro
       conector.   Send  solo  puede  ser  usado cuando un conector está en un
       estado connected mientras sendto y sendmsg  pueden  ser  utilizados  en
       cualquier momento.

       La  dirección  de  destino viene dada por to con tolen especificando su
       tamaño. La longitud del mensaje viene dada por len.  Si el  mensaje  es
       demasiado  largo  para  pasar  automáticamente  a  través del protocolo
       inferior, se devuelve el error EMSGSIZE y el mensaje no es transmitido.

       La  llamada  send  lleva  implícita  el que no se indiquen los posibles
       errores en la entrega.  Los errores detectados  localmente  se  indican
       devolviendo un valor -1.

       Cuando  el  mensaje no cabe en el buffer de envío del conector, send se
       bloquea, a no ser que el conector se haya colocado en el modo de E/S no
       bloqueante. En el modo no bloqueante devolvería EAGAIN en este caso. Se
       puede utilizar la llamada select(2) para determinar cuando  es  posible
       enviar más información.

       El  parámetro  flags  es  una  palabra de opciones y puede contener las
       siguientes opciones:

       MSG_OOB
              Enviar datos  fuera  de  orden(out-of-band)  en  conectores  que
              soportan   esta   noción   (p.ej.   SOCK_STREAM);  el  protocolo
              subyacente también debe soportar datos fuera de orden.

       MSG_DONTROUTE
              No usar un ‘‘gateway’’ para enviar el paquete, enviar sólo a los
              ordenadores  que se encuentren en redes conectadas directamente.
              Normalmente, esto sólo lo utilizan los programas de  diagnóstico
              y  enrutamiento. Esta opción sólo está definida para familias de
              protocolos que enrutan. Los conectores de paquetes no enrutan.

       MSG_DONTWAIT
              Habilitar el funcionamiento no bloqueante. Si  la  operación  se
              bloqueara, se devolvería EAGAIN (esto también se puede habilitar
              usando  la  bandera  O_NONBLOCK  con  la  operación  F_SETFL  de
              fcntl(2)).

       MSG_NOSIGNAL
              Solicitar  el  no  enviar SIGPIPE en caso de error en conectores
              orientados a conexión cuando el otro extremo rompa la  conexión.
              Todavía se devuelve el error EPIPE.

       MSG_CONFIRM (Linux 2.3+ solamente)
              Le  dice  a  la  capa  de  enlace  que  se produjo el proceso de
              redirección: tienes una confirmación positiva del otro lado.  Si
              la   capa   de  enlace  no  recibe  esta  respuesta  interrogará
              regularmente  al  vecino  (p.e.  a  través  de  un  mensaje  ARP
              unicast).   Sólo  válida para conectores SOCK_DGRAM y SOCK_RAW y
              actualmente sólo está implementada en IPv4 e  IPv6.  Vea  arp(7)
              para más detalles.

       La  definición  de  la estructura msghdr se muestra a continuación. Vea
       recv(2) y más abajo para una descripción exacta de sus campos.

              struct msghdr {
                  void         * msg_name;     /* dirección opcional */
                  socklen_t    msg_namelen;    /* tamaño de la dirección */
                  struct iovec * msg_iov;      /* vector dispersión/reunión */
                  size_t       msg_iovlen;     /* # elementos en msg_iov */
                  void         * msg_control;  /* datos auxiliares, vea más abajo */
                  socklen_t    msg_controllen; /* longitud del buffer de datos auxiliares */
                  int          msg_flags;      /* banderas en el mensaje recibido */
              };

       Puede enviar información de control usando los miembros  msg_control  y
       msg_controllen.  La longitud máxima del buffer de control que el núcleo
       puede   procesar   está   limitada   por   conector   por   la   sysctl
       net.core.optmem_max.  Vea socket(7).

VALOR DEVUELTO

       Las  llamadas  devuelven  el  numero de caracteres enviados, o -1 si ha
       ocurrido un error.

ERRORES

       Estos  son  algunos  errores  estándares  generados  por  la  capa   de
       conectores.  Los módulos de los protocolos subyacentes pueden generar y
       devolver errores adicionales. Vea sus páginas de manual respectivas.

       EBADF  Se ha especificado un descriptor no válido.

       ENOTSOCK
              El argumento s no es un conector.

       EFAULT Se ha especificado como parámetro una dirección  incorrecta  del
              espacio de usuario.  tro.

       EMSGSIZE
              El    conector   requiere   que   este   mensaje   sea   enviado
              automáticamente, y el tamaño del mensaje a ser enviado  lo  hace
              imposible.

       EAGAIN o EWOULDBLOCK
              El  conector  está  marcado  como  no  bloqueante y la operación
              solicitada lo bloquearía.

       ENOBUFS
              La cola  de  salida  del  interfaz  de  red  está  llena.   Esto
              generalmente  indica  que  el interfaz ha parado de enviar, pero
              puede ser causado por una congestión temporal.  (Esto  no  puede
              ocurrir   en   Linux,   los  paquetes  simplemente  se  suprimen
              silenciosamente cuando la cola de un dispositivo se desborda.)

       EINTR  Se ha producido una señal.

       ENOMEM No hay memoria disponible.

       EINVAL Se ha pasado un argumento inválido.

       EPIPE  Se ha desconectado el extremo local en un conector  orientado  a
              conexión.   En  este  caso el proceso tambíen recibirá una señal
              SIGPIPE a menos que se active la opción MSG_NOSIGNAL.

CONFORME A

       4.4BSD,  SVr4,  borrador  POSIX  1003.1g  (estas  llamadas  a   función
       aparecieron en 4.2BSD).

       MSG_CONFIRM es una extensión de Linux.

NOTA

       Los   prototipos   indicados   más   arriba  siguen  ‘the  Single  Unix
       Specification’, ya que glibc2 también lo hace; el argumento  flags  era
       ‘int’ en BSD 4.* pero ‘unsigned int’ en libc4 y libc5; el argumento len
       era ‘int’ en BSD 4.* y libc4 pero ‘size_t’ en libc5; el argumento tolen
       era ‘int’ en BSD 4.*, libc4 y libc5.  Vea también accept(2).

VÉASE TAMBIÉN

       fcntl(2),  recv(2),  select(2),  getsockopt(2), sendfile(2), socket(2),
       write(2), socket(7), ip(7), tcp(7), udp(7)