SEND(2)                    Linux Programmer's Manual                   SEND(2)

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

       #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);

       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  specifying  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 following flags:

              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.

              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 programs. This is only defined for  proto-
              col families that route; packet sockets don't.

              Enables  non-blocking  operation;  if the operation would block,
              EAGAIN is returned (this can also be enabled  using  the  O_NON-
              BLOCK with the F_SETFL fcntl(2)).

              Requests  not to send SIGPIPE on errors on stream oriented sock-
              ets when the other end breaks the connection. 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 uni-
              cast ARP).  Only valid on SOCK_DGRAM and  SOCK_RAW  sockets  and
              currently  only  implemented  for  IPv4 and IPv6. See arp(7) for

       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_con-
       trollen members. The maximum control buffer length the kernel can  pro-
       cess  is  limited  per  socket  by  the net.core.optmem_max sysctl; see

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

       These  are  some  standard  errors generated by the socket layer. Addi-
       tional errors may be generated and returned from the underlying  proto-
       col modules; see their respective manual pages.

       EBADF  An invalid descriptor was specified.

              The argument s is not a socket.

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

              The  socket  requires  that  message be sent atomically, and the
              size of the message to be sent made this impossible.

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

              The  output queue for a network interface was full.  This gener-
              ally 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-

       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.

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

       MSG_CONFIRM is a Linux extension.

       The prototypes given above follow the  Single  Unix  Specification,  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).

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

Linux Man Page                      1999-07                            SEND(2)