sendto

TriggerTek Logo
abcdefghijklmnopqrstuvwxyz_
SEND(2)			  Linux Programmer’s Manual		      SEND(2)



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

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

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

DESCRIPTION
       The system calls send, sendto, and sendmsg are used to transmit a mes-
       sage to another socket.

       The send call may be used only when the socket is in a connected state
       (so that the  intended  recipient  is  known).	The  only  difference
       between	send  and  write  is  the presence of flags.  With zero flags
       parameter, send is equivalent  to  write.   Also,  send(s,buf,len)  is
       equivalent to sendto(s,buf,len,NULL,0).

       The parameter s is the file descriptor of the sending socket.

       If  sendto  is used on a connection-mode (SOCK_STREAM, SOCK_SEQPACKET)
       socket, the parameters to and tolen are ignored (and the error EISCONN
       may  be returned when they are not NULL and 0), and the error ENOTCONN
       is returned when the socket was not actually connected. Otherwise, the
       address	of  the target is given by to with tolen specifying its size.
       For sendmsg, the address of the target is given by msg.msg_name,	 with
       msg.msg_namelen specifying its size.

       For  send  and sendto, the message is found in buf and has length len.
       For sendmsg, the message is pointed to by the elements  of  the	array
       msg.msg_iov.   The  sendmsg  call  also	allows sending ancillary data
       (also known as control information).

       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 the bitwise OR of zero or more of the following
       flags.

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

       MSG_EOR
	      Terminates a record (when this  notion  is  supported,  as  for
	      sockets of type SOCK_SEQPACKET).

       MSG_DONTROUTE
	      Don’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.

       MSG_DONTWAIT
	      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)).

       MSG_NOSIGNAL
	      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 progress 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
	      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_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
       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.	Addi-
       tional errors may be generated and returned from the underlying proto-
       col modules; see their respective manual pages.

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

       EBADF  An invalid descriptor was specified.

       ECONNRESET
	      Connection reset by peer.

       EDESTADDRREQ
	      The  socket is not connection-mode, and no peer address is set.

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

       EINTR  A signal occurred before any data was transmitted.

       EINVAL Invalid argument passed.

       EISCONN
	      The connection-mode socket was connected already but a  recipi-
	      ent  was specified.  (Now either this error is returned, or the
	      recipient specification is ignored.)

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

       ENOBUFS
	      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.  (Normally, this does not
	      occur in Linux. Packets are just silently dropped when a device
	      queue overflows.)

       ENOMEM No memory available.

       ENOTCONN
	      The socket is not connected, and no target has been given.

       ENOTSOCK
	      The argument s is not a socket.

       EOPNOTSUPP
	      Some  bit in the flags argument is inappropriate for the socket
	      type.

       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.1-2001.	 These	function  calls	 appeared  in
       4.2BSD.

       POSIX  only  describes the MSG_OOB and MSG_EOR flags.  The MSG_CONFIRM
       flag is a Linux extension.

NOTE
       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).

BUGS
       Linux may return EPIPE instead of ENOTCONN.

SEE ALSO
       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			  2003-10-25			      SEND(2)