 f14fb60209
			
		
	
	
		f14fb60209
		
	
	
	
	
		
			
			* Updating common/lib * Updating lib/csu * Updating lib/libc * Updating libexec/ld.elf_so * Corrected test on __minix in featuretest to actually follow the meaning of the comment. * Cleaned up _REENTRANT-related defintions. * Disabled -D_REENTRANT for libfetch * Removing some unneeded __NBSD_LIBC defines and tests Change-Id: Ic1394baef74d11b9f86b312f5ff4bbc3cbf72ce2
		
			
				
	
	
		
			278 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			278 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\"	$NetBSD: send.2,v 1.30 2012/06/22 22:54:26 wiz Exp $
 | |
| .\"
 | |
| .\" Copyright (c) 1983, 1991, 1993
 | |
| .\"	The Regents of the University of California.  All rights reserved.
 | |
| .\"
 | |
| .\" Redistribution and use in source and binary forms, with or without
 | |
| .\" modification, are permitted provided that the following conditions
 | |
| .\" are met:
 | |
| .\" 1. Redistributions of source code must retain the above copyright
 | |
| .\"    notice, this list of conditions and the following disclaimer.
 | |
| .\" 2. Redistributions in binary form must reproduce the above copyright
 | |
| .\"    notice, this list of conditions and the following disclaimer in the
 | |
| .\"    documentation and/or other materials provided with the distribution.
 | |
| .\" 3. Neither the name of the University nor the names of its contributors
 | |
| .\"    may be used to endorse or promote products derived from this software
 | |
| .\"    without specific prior written permission.
 | |
| .\"
 | |
| .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | |
| .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | |
| .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | |
| .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | |
| .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | |
| .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | |
| .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | |
| .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | |
| .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | |
| .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | |
| .\" SUCH DAMAGE.
 | |
| .\"
 | |
| .\"     @(#)send.2	8.2 (Berkeley) 2/21/94
 | |
| .\"
 | |
| .Dd June 22, 2012
 | |
| .Dt SEND 2
 | |
| .Os
 | |
| .Sh NAME
 | |
| .Nm send ,
 | |
| .Nm sendto ,
 | |
| .Nm sendmsg ,
 | |
| .Nm sendmmsg
 | |
| .Nd send a message from a socket
 | |
| .Sh LIBRARY
 | |
| .Lb libc
 | |
| .Sh SYNOPSIS
 | |
| .In sys/socket.h
 | |
| .Ft ssize_t
 | |
| .Fn send "int s" "const void *msg" "size_t len" "int flags"
 | |
| .Ft ssize_t
 | |
| .Fn sendto "int s" "const void *msg" "size_t len" "int flags" "const struct sockaddr *to" "socklen_t tolen"
 | |
| .Ft ssize_t
 | |
| .Fn sendmsg "int s" "const struct msghdr *msg" "int flags"
 | |
| .Ft int
 | |
| .Fn sendmmsg "int s" "struct mmsghdr *mmsg" "unsigned int vlen" "unsigned int flags"
 | |
| .Sh DESCRIPTION
 | |
| .Fn send ,
 | |
| .Fn sendto ,
 | |
| .Fn sendmsg ,
 | |
| and
 | |
| .Fn sendmmsg
 | |
| are used to transmit a message to another socket.
 | |
| .Fn send
 | |
| may be used only when the socket is in a
 | |
| .Em connected
 | |
| state, while
 | |
| .Fn sendto ,
 | |
| .Fn sendmsg
 | |
| and
 | |
| .Fn sendmmsg
 | |
| may be used at any time.
 | |
| .Pp
 | |
| The
 | |
| .Fn sendmmsg
 | |
| call be used to send multiple messages in the same call using an array of
 | |
| .Fa mmsghdr
 | |
| elements with the following form, as defined in
 | |
| .Ao Pa sys/socket.h Ac :
 | |
| .Pp
 | |
| .Bd -literal
 | |
| struct mmsghdr {
 | |
| 	struct msghdr	msg_hdr;	/* the message to be sent */
 | |
| 	unsigned int	msg_len;	/* number of bytes transmitted */
 | |
| };
 | |
| .Ed
 | |
| .Pp
 | |
| The
 | |
| .Fa msg_len
 | |
| member contains the number of bytes sent for each
 | |
| .Fa msg_hdr
 | |
| member.
 | |
| The array has
 | |
| .Fa vlen
 | |
| elements, which is limited to
 | |
| .Dv 1024 .
 | |
| If there is an error, a number fewer than
 | |
| .Fa vlen
 | |
| may be returned, and the error may be retrieved using
 | |
| .Xr getsockopt 2
 | |
| with
 | |
| .Dv SO_ERROR .
 | |
| .Pp
 | |
| The address of the target is given by
 | |
| .Fa to
 | |
| with
 | |
| .Fa tolen
 | |
| specifying its size.
 | |
| The length of the message is given by
 | |
| .Fa len .
 | |
| If the message is too long to pass atomically through the
 | |
| underlying protocol, the error
 | |
| .Er EMSGSIZE
 | |
| is returned, and
 | |
| the message is not transmitted.
 | |
| .Pp
 | |
| No indication of failure to deliver is implicit in a
 | |
| .Fn send .
 | |
| Locally detected errors are indicated by a return value of \-1.
 | |
| .Pp
 | |
| If no messages space is available at the socket to hold
 | |
| the message to be transmitted, then
 | |
| .Fn send
 | |
| normally blocks, unless the socket has been placed in
 | |
| non-blocking I/O mode.
 | |
| The
 | |
| .Xr select 2
 | |
| or
 | |
| .Xr poll 2
 | |
| call may be used to determine when it is possible to
 | |
| send more data.
 | |
| Unfortunately this does not work when the interface queue which is used to
 | |
| send the message is full, and the call returns
 | |
| .Er ENOBUFS .
 | |
| .Pp
 | |
| The
 | |
| .Fa flags
 | |
| parameter may include one or more of the following:
 | |
| .Bd -literal
 | |
| #define	MSG_OOB		0x0001 /* process out-of-band data */
 | |
| #define	MSG_PEEK	0x0002 /* peek at incoming message */
 | |
| #define	MSG_DONTROUTE	0x0004 /* bypass routing, use direct interface */
 | |
| #define	MSG_EOR		0x0008 /* data completes record */
 | |
| #define	MSG_NOSIGNAL	0x0400 /* do not generate SIGPIPE on EOF */
 | |
| .Ed
 | |
| .Pp
 | |
| The flag
 | |
| .Dv MSG_OOB
 | |
| is used to send
 | |
| .Dq out-of-band
 | |
| data on sockets that support this notion (e.g.
 | |
| .Dv SOCK_STREAM ) ;
 | |
| the underlying protocol must also support
 | |
| .Dq out-of-band
 | |
| data.
 | |
| .Dv MSG_EOR
 | |
| is used to indicate a record mark for protocols which support the
 | |
| concept.
 | |
| .\" .Dv MSG_EOF
 | |
| .\" requests that the sender side of a socket be shut down, and that an
 | |
| .\" appropriate indication be sent at the end of the specified data;
 | |
| .\" this flag is only implemented for
 | |
| .\" .Dv SOCK_STREAM
 | |
| .\" sockets in the
 | |
| .\" .Dv PF_INET
 | |
| .\" protocol family, and is used to implement Transaction
 | |
| .\" .Tn TCP
 | |
| .\" (see
 | |
| .\" .Xr ttcp 4 ) .
 | |
| .Dv MSG_DONTROUTE
 | |
| is usually used only by diagnostic or routing programs.
 | |
| .Pp
 | |
| See
 | |
| .Xr recv 2
 | |
| for a description of the
 | |
| .Fa msghdr
 | |
| structure.
 | |
| .Dv MSG_NOSIGNAL
 | |
| is used to prevent
 | |
| .Dv SIGPIPE
 | |
| generation when writing a socket that
 | |
| may be closed.
 | |
| .Sh RETURN VALUES
 | |
| The
 | |
| .Fn send ,
 | |
| .Fn sendto ,
 | |
| and
 | |
| .Fn sendmsg
 | |
| calls return the number of characters sent, or \-1
 | |
| if an error occurred.
 | |
| The
 | |
| .Fn sendmmsg
 | |
| call returns the number of messages sent, or \-1
 | |
| if an error occured.
 | |
| .Sh ERRORS
 | |
| .Fn send ,
 | |
| .Fn sendto ,
 | |
| .Fn sendmsg ,
 | |
| and
 | |
| .Fn sendmmsg
 | |
| fail if:
 | |
| .Bl -tag -width Er
 | |
| .It Bq Er EACCES
 | |
| The SO_BROADCAST option is not set on the socket, and a broadcast address
 | |
| was given as the destination.
 | |
| .It Bq Er EAFNOSUPPORT
 | |
| Addresses in the specified address family cannot be used with this socket.
 | |
| .It Bq Er EAGAIN|EWOULDBLOCK
 | |
| The socket is marked non-blocking and the requested operation
 | |
| would block.
 | |
| .It Bq Er EBADF
 | |
| An invalid descriptor was specified.
 | |
| .It Bq Er EDSTADDRREQ
 | |
| In a non-connected socket a destination address has not been specified.
 | |
| .It Bq Er EFAULT
 | |
| An invalid user space address was specified for a parameter.
 | |
| .It Bq Er EHOSTDOWN
 | |
| The destination is a host on the local subnet and does not respond to
 | |
| .Xr arp 4 .
 | |
| .It Bq Er EHOSTUNREACH
 | |
| The destination for the message is unreachable.
 | |
| .It Bq Er EINVAL
 | |
| The total length of the I/O is more than can be expressed by the ssize_t
 | |
| return value.
 | |
| .It Bq Er EMSGSIZE
 | |
| The socket requires that message be sent atomically,
 | |
| and the size of the message to be sent made this impossible.
 | |
| .It Bq Er ENOBUFS
 | |
| The system was unable to allocate an internal buffer.
 | |
| The operation may succeed when buffers become available.
 | |
| .Pp
 | |
| An alternative reason: 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.
 | |
| .It Bq Er ENOTSOCK
 | |
| The argument
 | |
| .Fa s
 | |
| is not a socket.
 | |
| .It Bq Er EPIPE
 | |
| In a connected socket the connection has been broken.
 | |
| .El
 | |
| .Pp
 | |
| .Fn sendto
 | |
| will also fail if:
 | |
| .Bl -tag -width Er
 | |
| .It Bq Er EISCONN
 | |
| A destination address was specified and the socket is already connected.
 | |
| .El
 | |
| .Pp
 | |
| .Fn sendmsg
 | |
| and
 | |
| .Fn sendmmsg
 | |
| will also fail if:
 | |
| .Bl -tag -width Er
 | |
| .It Bq Er EMSGSIZE
 | |
| The
 | |
| .Fa msg_iovlen
 | |
| member of the
 | |
| .Fa msg
 | |
| structure is less than or equal to 0
 | |
| or is greater than
 | |
| .Dv {IOV_MAX} .
 | |
| .El
 | |
| .Sh SEE ALSO
 | |
| .Xr fcntl 2 ,
 | |
| .Xr getsockopt 2 ,
 | |
| .Xr recv 2 ,
 | |
| .Xr select 2 ,
 | |
| .Xr socket 2 ,
 | |
| .Xr write 2
 | |
| .Sh HISTORY
 | |
| The
 | |
| .Fn send
 | |
| function call appeared in
 | |
| .Bx 4.2 .
 | |
| The
 | |
| .Fn sendmmsg
 | |
| function call appeared in
 | |
| .Tn Linux 3.0
 | |
| and
 | |
| .Nx 7.0 .
 |