bionic (2) sendto.2.gz

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)