Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
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
       process	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)


Want to link to this manual page? Use this URL:

home | help