send, sendto, sendmsg - send a message from a socket


SYNOPSIS

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

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


DESCRIPTION

       Send, sendto, and sendmsg are used to transmit  a  message
       to  another socket.  Send may be used only when the socket
       is in a connected state, while sendto and sendmsg  may  be
       used at any time.

       The address of the target is given by to with tolen speci­
       fying its size.  The length of the  message  is  given  by
       len.   If  the  message  is  too  long  to pass atomically
       through the underlying protocol,  the  error  EMSGSIZE  is
       returned, and the message is not transmitted.

       No indication of failure to deliver is implicit in a send.
       Locally detected errors are indicated by a return value of
       -1.

       When  the message does not fit into the send buffer of the
       socket, send normally blocks, unless the socket  has  been
       placed  in non-blocking I/O mode.  In non-blocking mode it
       would return EAGAIN in this case.  The select(2) call  may
       be  used  to  determine  when  it is possible to send more
       data.

       The flags parameter is a flagword and can contain the fol­
       lowing flags:

       MSG_OOB
              Sends out-of-band data on sockets that support this
              notion (e.g.  SOCK_STREAM); the underlying protocol
              must also support out-of-band data.

       MSG_DONTROUTE
              Dont't  use  a gateway to send out the packet, only
              send to hosts on directly connected networks.  This
              is  usually used only by diagnostic or routing pro­
              grams. This is only defined for  protocol  families
              that route; packet sockets don't.

       MSG_DONTWAIT
              Enables  non-blocking  operation;  if the operation
              would block, EAGAIN is returned (this can  also  be
              enabled  using  the  O_NONBLOCK  with  the  F_SETFL


       MSG_NOSIGNAL
              Requests not to send SIGPIPE on  errors  on  stream
              oriented sockets when the other end breaks the con­
              nection. The EPIPE error is still returned.

       MSG_CONFIRM (Linux 2.3+ only)
              Tell the link layer that forward process  happened:
              you  got a successful reply from the other side. If
              the link layer doesn't  get  this  it'll  regularly
              reprobe  the  neighbour  (e.g.  via a unicast ARP).
              Only valid on SOCK_DGRAM and SOCK_RAW  sockets  and
              currently  only  implemented for IPv4 and IPv6. See
              arp(7) for details.

       The  definition  of  the  msghdr  structure  follows.  See
       recv(2)  and below for an exact description of its fields.

              struct msghdr {
                  void         * msg_name;     /* optional address */
                  socklen_t    msg_namelen;    /* size of address */
                  struct iovec * msg_iov;      /* scatter/gather array */
                  size_t       msg_iovlen;     /* # elements in msg_iov */
                  void         * msg_control;  /* ancillary data, see below */
                  socklen_t    msg_controllen; /* ancillary data buffer len */
                  int          msg_flags;      /* flags on received message */
              };

       You may send control information using the msg_control and
       msg_controllen  members. The maximum control buffer length
       the kernel can  process  is  limited  per  socket  by  the
       net.core.optmem_max sysctl; see socket(7).


RETURN VALUE

       The  calls  return the number of characters sent, or -1 if
       an error occurred.


ERRORS

       These are some standard errors  generated  by  the  socket
       layer.  Additional  errors  may  be generated and returned
       from the underlying protocol modules; see their respective
       manual pages.

       EBADF  An invalid descriptor was specified.

       ENOTSOCK
              The argument s is not a socket.

       EFAULT An  invalid  user space address was specified for a
              parameter.

       EMSGSIZE
              The  socket   requires   that   message   be   sent

              made this impossible.

       EAGAIN or EWOULDBLOCK
              The socket is marked non-blocking and the requested
              operation would block.

       ENOBUFS
              The  output queue for a network interface was full.
              This generally indicates  that  the  interface  has
              stopped  sending,  but  may  be caused by transient
              congestion.  (This cannot occur in  Linux,  packets
              are just silently dropped when a device queue over­
              flows.)

       EINTR  A signal occurred.

       ENOMEM No memory available.

       EINVAL Invalid argument passed.

       EPIPE  The local end has been shut down  on  a  connection
              oriented  socket.   In  this  case the process will
              also receive a SIGPIPE unless MSG_NOSIGNAL is  set.


CONFORMING TO

       4.4BSD,  SVr4,  POSIX  1003.1g draft (these function calls
       appeared in 4.2BSD).

       MSG_CONFIRM is a Linux extension.


NOTE

       The prototypes given above follow the Single Unix Specifi­
       cation,  as glibc2 also does; the flags argument was `int'
       in BSD 4.*, but `unsigned int' in libc4 and libc5; the len
       argument  was  `int' in BSD 4.* and libc4, but `size_t' in
       libc5; the tolen argument was `int' in BSD 4.*  and  libc4
       and libc5.  See also accept(2).


SEE ALSO

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


Man(1) output converted with man2html