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


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

       int  send(int  s,  const  void *msg, int len, unsigned int
       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


       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

       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

       The flags parameter may include one or more of the follow­

              #define MSG_OOB           0x1     /* process out-of-band data */
              #define MSG_DONTROUTE     0x4     /* bypass routing, use direct interface */
              #define MSG_DONTWAIT      0x40    /* don't block */
              #define MSG_NOSIGNAL      0x2000  /* don't raise SIGPIPE */

              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.

              Bypasses  the  usual routing table lookup and sends
              the packet directly to the interface  described  by

              Enables non-blocking operation;  if  the  operation
              would block, EAGAIN is returned.

              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.

       See recv(2) for a description of the msghdr structure. You
       may send control information  using  the  msg_control  and
       msg_controllen  members. The maximum control buffer length
       the kernel can process is  limited  by  the  net.core.opt­
       mem_max sysctl; see socket(4).


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


       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.

               The argument s is not a socket.

       EFAULT  An  invalid user space address was specified for a

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

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

       ENOBUFS The system was unable to allocate an internal mem­
               ory block.  The operation may succeed when buffers
               become available.

       EINTR   A signal occurred.

       ENOMEM  No memory available.

       EINVAL  Invalid argument passed.

               also receive a SIGPIPE unless MSG_NOSIGNAL is set.


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


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