send

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



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)



Página man de Linux             31 diciembre 2002                        SEND(2)