2013-07-14 18:29:09 +04:00
|
|
|
.\" $NetBSD: send.2,v 1.31 2013/07/14 14:29:09 njoly Exp $
|
1995-02-27 15:31:34 +03:00
|
|
|
.\"
|
|
|
|
.\" Copyright (c) 1983, 1991, 1993
|
|
|
|
.\" The Regents of the University of California. All rights reserved.
|
1993-03-21 12:45:37 +03:00
|
|
|
.\"
|
|
|
|
.\" 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.
|
2003-08-07 20:42:00 +04:00
|
|
|
.\" 3. Neither the name of the University nor the names of its contributors
|
1993-03-21 12:45:37 +03:00
|
|
|
.\" 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.
|
|
|
|
.\"
|
1995-02-27 15:31:34 +03:00
|
|
|
.\" @(#)send.2 8.2 (Berkeley) 2/21/94
|
1993-03-21 12:45:37 +03:00
|
|
|
.\"
|
2012-06-23 02:49:03 +04:00
|
|
|
.Dd June 22, 2012
|
1993-03-21 12:45:37 +03:00
|
|
|
.Dt SEND 2
|
1999-03-22 22:44:33 +03:00
|
|
|
.Os
|
1993-03-21 12:45:37 +03:00
|
|
|
.Sh NAME
|
|
|
|
.Nm send ,
|
|
|
|
.Nm sendto ,
|
2012-06-22 22:28:38 +04:00
|
|
|
.Nm sendmsg ,
|
|
|
|
.Nm sendmmsg
|
1993-03-21 12:45:37 +03:00
|
|
|
.Nd send a message from a socket
|
1999-12-03 00:42:35 +03:00
|
|
|
.Sh LIBRARY
|
|
|
|
.Lb libc
|
1993-03-21 12:45:37 +03:00
|
|
|
.Sh SYNOPSIS
|
2003-04-16 17:34:34 +04:00
|
|
|
.In sys/socket.h
|
1995-02-27 15:31:34 +03:00
|
|
|
.Ft ssize_t
|
|
|
|
.Fn send "int s" "const void *msg" "size_t len" "int flags"
|
|
|
|
.Ft ssize_t
|
1999-02-10 21:20:02 +03:00
|
|
|
.Fn sendto "int s" "const void *msg" "size_t len" "int flags" "const struct sockaddr *to" "socklen_t tolen"
|
1995-02-27 15:31:34 +03:00
|
|
|
.Ft ssize_t
|
1993-03-21 12:45:37 +03:00
|
|
|
.Fn sendmsg "int s" "const struct msghdr *msg" "int flags"
|
2012-06-22 22:28:38 +04:00
|
|
|
.Ft int
|
|
|
|
.Fn sendmmsg "int s" "struct mmsghdr *mmsg" "unsigned int vlen" "unsigned int flags"
|
1993-03-21 12:45:37 +03:00
|
|
|
.Sh DESCRIPTION
|
1998-08-29 12:32:32 +04:00
|
|
|
.Fn send ,
|
1993-03-21 12:45:37 +03:00
|
|
|
.Fn sendto ,
|
2012-06-22 22:28:38 +04:00
|
|
|
.Fn sendmsg ,
|
1993-03-21 12:45:37 +03:00
|
|
|
and
|
2012-06-22 22:28:38 +04:00
|
|
|
.Fn sendmmsg
|
1993-03-21 12:45:37 +03:00
|
|
|
are used to transmit a message to another socket.
|
1998-08-29 12:32:32 +04:00
|
|
|
.Fn send
|
2001-09-16 05:38:59 +04:00
|
|
|
may be used only when the socket is in a
|
1993-03-21 12:45:37 +03:00
|
|
|
.Em connected
|
2001-09-16 05:38:59 +04:00
|
|
|
state, while
|
2012-06-22 22:28:38 +04:00
|
|
|
.Fn sendto ,
|
1993-03-21 12:45:37 +03:00
|
|
|
.Fn sendmsg
|
2012-06-22 22:28:38 +04:00
|
|
|
and
|
|
|
|
.Fn sendmmsg
|
1993-03-21 12:45:37 +03:00
|
|
|
may be used at any time.
|
|
|
|
.Pp
|
2012-06-22 22:28:38 +04:00
|
|
|
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 :
|
2012-06-23 02:49:03 +04:00
|
|
|
.Pp
|
2012-06-22 22:28:38 +04:00
|
|
|
.Bd -literal
|
|
|
|
struct mmsghdr {
|
|
|
|
struct msghdr msg_hdr; /* the message to be sent */
|
|
|
|
unsigned int msg_len; /* number of bytes transmitted */
|
|
|
|
};
|
|
|
|
.Ed
|
|
|
|
.Pp
|
2012-06-23 02:49:03 +04:00
|
|
|
The
|
2012-06-22 22:28:38 +04:00
|
|
|
.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
|
1993-03-21 12:45:37 +03:00
|
|
|
The address of the target is given by
|
|
|
|
.Fa to
|
2001-09-16 05:38:59 +04:00
|
|
|
with
|
1993-03-21 12:45:37 +03:00
|
|
|
.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 .
|
2004-05-13 14:20:57 +04:00
|
|
|
Locally detected errors are indicated by a return value of \-1.
|
1993-03-21 12:45:37 +03:00
|
|
|
.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
|
1998-07-28 13:43:30 +04:00
|
|
|
or
|
|
|
|
.Xr poll 2
|
1993-03-21 12:45:37 +03:00
|
|
|
call may be used to determine when it is possible to
|
|
|
|
send more data.
|
2012-06-22 22:28:38 +04:00
|
|
|
Unfortunately this does not work when the interface queue which is used to
|
|
|
|
send the message is full, and the call returns
|
|
|
|
.Er ENOBUFS .
|
1993-03-21 12:45:37 +03:00
|
|
|
.Pp
|
|
|
|
The
|
|
|
|
.Fa flags
|
|
|
|
parameter may include one or more of the following:
|
|
|
|
.Bd -literal
|
2006-05-11 19:48:48 +04:00
|
|
|
#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 */
|
1993-03-21 12:45:37 +03:00
|
|
|
.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.
|
2006-05-11 19:48:48 +04:00
|
|
|
.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 ) .
|
1993-03-21 12:45:37 +03:00
|
|
|
.Dv MSG_DONTROUTE
|
|
|
|
is usually used only by diagnostic or routing programs.
|
|
|
|
.Pp
|
2001-09-16 05:38:59 +04:00
|
|
|
See
|
1993-03-21 12:45:37 +03:00
|
|
|
.Xr recv 2
|
|
|
|
for a description of the
|
|
|
|
.Fa msghdr
|
|
|
|
structure.
|
2006-05-11 19:48:48 +04:00
|
|
|
.Dv MSG_NOSIGNAL
|
|
|
|
is used to prevent
|
|
|
|
.Dv SIGPIPE
|
|
|
|
generation when writing a socket that
|
|
|
|
may be closed.
|
1993-03-21 12:45:37 +03:00
|
|
|
.Sh RETURN VALUES
|
2012-06-23 02:49:03 +04:00
|
|
|
The
|
2012-06-22 22:28:38 +04:00
|
|
|
.Fn send ,
|
|
|
|
.Fn sendto ,
|
|
|
|
and
|
|
|
|
.Fn sendmsg
|
|
|
|
calls return the number of characters sent, or \-1
|
1993-03-21 12:45:37 +03:00
|
|
|
if an error occurred.
|
2012-06-22 22:28:38 +04:00
|
|
|
The
|
|
|
|
.Fn sendmmsg
|
|
|
|
call returns the number of messages sent, or \-1
|
|
|
|
if an error occured.
|
1993-03-21 12:45:37 +03:00
|
|
|
.Sh ERRORS
|
1998-08-29 12:32:32 +04:00
|
|
|
.Fn send ,
|
1993-03-21 12:45:37 +03:00
|
|
|
.Fn sendto ,
|
2012-06-22 22:28:38 +04:00
|
|
|
.Fn sendmsg ,
|
1993-03-21 12:45:37 +03:00
|
|
|
and
|
2012-06-22 22:28:38 +04:00
|
|
|
.Fn sendmmsg
|
1993-03-21 12:45:37 +03:00
|
|
|
fail if:
|
1993-11-30 00:24:57 +03:00
|
|
|
.Bl -tag -width Er
|
2012-06-23 02:49:03 +04:00
|
|
|
.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.
|
1993-03-21 12:45:37 +03:00
|
|
|
.It Bq Er EBADF
|
|
|
|
An invalid descriptor was specified.
|
2012-06-23 02:49:03 +04:00
|
|
|
.It Bq Er EDSTADDRREQ
|
|
|
|
In a non-connected socket a destination address has not been specified.
|
1993-03-21 12:45:37 +03:00
|
|
|
.It Bq Er EFAULT
|
|
|
|
An invalid user space address was specified for a parameter.
|
2012-06-23 02:49:03 +04:00
|
|
|
.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.
|
1993-03-21 12:45:37 +03:00
|
|
|
.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.
|
2012-06-23 02:49:03 +04:00
|
|
|
.Pp
|
|
|
|
An alternative reason: the output queue for a network interface was full.
|
1993-03-21 12:45:37 +03:00
|
|
|
This generally indicates that the interface has stopped sending,
|
|
|
|
but may be caused by transient congestion.
|
2012-06-23 02:49:03 +04:00
|
|
|
.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.
|
1993-03-21 12:45:37 +03:00
|
|
|
.El
|
1998-08-04 23:48:34 +04:00
|
|
|
.Pp
|
2003-04-21 02:53:01 +04:00
|
|
|
.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
|
1998-08-29 12:32:32 +04:00
|
|
|
.Fn sendmsg
|
2012-06-22 22:28:38 +04:00
|
|
|
and
|
|
|
|
.Fn sendmmsg
|
1998-08-04 23:48:34 +04:00
|
|
|
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
|
2013-07-14 18:29:09 +04:00
|
|
|
.Brq Dv IOV_MAX .
|
1998-08-04 23:48:34 +04:00
|
|
|
.El
|
1993-03-21 12:45:37 +03:00
|
|
|
.Sh SEE ALSO
|
|
|
|
.Xr fcntl 2 ,
|
2001-09-16 06:13:26 +04:00
|
|
|
.Xr getsockopt 2 ,
|
1993-03-21 12:45:37 +03:00
|
|
|
.Xr recv 2 ,
|
|
|
|
.Xr select 2 ,
|
|
|
|
.Xr socket 2 ,
|
|
|
|
.Xr write 2
|
|
|
|
.Sh HISTORY
|
|
|
|
The
|
1993-11-25 03:38:17 +03:00
|
|
|
.Fn send
|
1993-03-21 12:45:37 +03:00
|
|
|
function call appeared in
|
|
|
|
.Bx 4.2 .
|
2012-06-22 22:28:38 +04:00
|
|
|
The
|
|
|
|
.Fn sendmmsg
|
|
|
|
function call appeared in
|
2012-06-23 02:54:26 +04:00
|
|
|
.Tn Linux 3.0
|
2012-06-22 22:28:38 +04:00
|
|
|
and
|
2012-06-23 02:54:26 +04:00
|
|
|
.Nx 7.0 .
|