SEND(2)

NOMBRE
send, sendto, sendmsg - envía un mensaje de un socket

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

int send(int s, const void *msg, int len, unsigned int flags);

int sendto(int s, const void *msg, int len, unsigned int flags, const struct sockaddr *to, int tolen);

int sendmsg(int s, const struct msghdr *msg, unsigned int flags);

DESCRIPCIÓN
ATENCIÓN: Esta es una pagina de manual BSD. Hasta el Linux 0.99.11, sendmsg no ha sido implementado. Send, sendto, y sendmsg son utilizados para transmitir un mensaje a otro socket. Send solo puede ser usado cuando un socket 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, es devuelto el error EMSGSIZE y el mensaje no es transmitido. La no indicación de un error viene implícito en una llamada a send. Errores detectados localmente son indicados medieante un valor de retorno -1. Si no existe espacio disponible en el socket para contener el mensaje a enviar, entonces send se bloquea, a no ser que el socket ha sido habilitado en un modo de no bloqueo para la E/S (non-blocking I/O). La llamada select(2) puede ser utilizada para determinar cuando es posible enviar más información. El parámetro flags puede contener uno o más de los siguientes valores:
    #define	MSG_OOB        0x1  /* process out-of-band data */
    #define	MSG_DONTROUTE  0x4  /* bypass routing, use direct interface */
El parámetro MSG_OOB es utilizado para enviar out-of-band datos en sockets que soportan esta noción (p.ej. SOCK_STREAM); el protocolo inferior debe soportar información del tipo out-of-band MSG_DONTROUTE es utilizado solo para el diagnóstico de programas de enrutado. Vea recv(2) para una descripción de la estructura msghdr

VALORES DEVUELTOS
La llamada retorna el numero de caracteres enviados, o -1 si ha ocurrido un error.

ERRORES

EBADF
    Un descriptor no válido ha sido especificado.

ENOTSOCK
    El argumento s no es un socket.

EFAULT
    Una dirección del espacio de usuario incorrecta ha sido especificada como paráme tro.

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

EWOULDBLOCK
    El socket está marcado como "non-blocking" y la operación solicitada debe bloque ar.

ENOBUFS
    El sistema ha sido incapaz de habilitar un buffer interno. La operación se ejecutará cuando los buffers estén disponibles.

ENOBUFS
    La cola de salida del interface de red está lleno. Esto generalmente indica que el interfaz ha parado de enviar, pero puede ser causado por una congestión temporal.

COMPATIBLE CON
4.4BSD, SVr4 (estas llamadas al sistema aparecion en 4.2BSD). Las versiones SV4r docomentan las condiciones de error EINVAL, EINTR, EMSGSIZE, ENOSR, ENOMEM.

VER TAMBIEN
fcntl(2), recv(2), select(2), getsockopt(2), socket(2), write(2)