Provided by: manpages-es_1.55-10_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)