send,
sendto,
sendmsg —
send
a message from a socket
Standard C Library (libc, -lc)
#include
<sys/types.h>
#include
<sys/socket.h>
ssize_t
send(
int s,
const void *msg,
size_t len,
int
flags);
ssize_t
sendto(
int s,
const void *msg,
size_t len,
int
flags,
const struct sockaddr *to,
socklen_t tolen);
ssize_t
sendmsg(
int s,
const struct msghdr *msg,
int flags);
The
send(),
sendto(),
and
sendmsg() functions are used to transmit a
message to another transport end-point. The
send() function can be used only when the socket
is in a connected state. See
connect(3C). The
sendto() and
sendmsg() functions can be used at any time. The
s socket is created with
socket(3C).
The address of the target is supplied by
to
with a
tolen parameter used to specify the
size. The length of the message is supplied by the
len parameter. For socket types such as
SOCK_DGRAM
and
SOCK_RAW
that require atomic messages, the
error
EMSGSIZE
is returned and the message
is not transmitted when it is too long to pass atomically through the
underlying protocol. The same restrictions do not apply to
SOCK_STREAM
sockets.
A return value -1 indicates locally detected errors. It does not imply a
delivery failure.
If the socket does not have enough buffer space available to hold a message, the
send() function blocks the message, unless the
socket has been placed in non-blocking I/O mode (see
fcntl(2)). The
select(3C) or
poll(2) call can be used to determine when it is
possible to send more data.
The
flags parameter is formed from the bitwise
OR of zero or more of the following:
-
-
MSG_OOB
- Send out-of-band data on sockets that support this notion.
The underlying protocol must also support out-of-band data. Only
SOCK_STREAM
sockets created in the
AF_INET
or the
AF_INET6
address family support
out-of-band data.
-
-
MSG_DONTROUTE
- The
SO_DONTROUTE
option
is turned on for the duration of the operation. It is used only by
diagnostic or routing programs.
-
-
MSG_NOSIGNAL
- Don't generate the
SIGPIPE
signal when a stream-oriented
socket is no longer connected.
See
recv(3C) for a description of the
msghdr structure.
Upon successful completion, these functions return the number of bytes sent.
Otherwise, they return -1 and set
errno to
indicate the error.
The
send(),
sendto(),
and
sendmsg() functions return errors under the
following conditions:
-
-
- [
EBADF
]
- s is not a valid file
descriptor.
-
-
- [
ECONNRESET
]
- The s argument refers to a
connection oriented socket and the connection was forcibly closed by the
peer and is no longer valid. I/O can no longer be performed to
filedes.
-
-
- [
EINTR
]
- The operation was interrupted by delivery of a signal
before any data could be buffered to be sent.
-
-
- [
EMSGSIZE
]
- The message is too large to be sent all at once (as the
socket requires), or the msg_iovlen
member of the msghdr structure pointed to
by message is less than or equal to 0 or is greater than
{
IOV_MAX
}.
-
-
- [
ENOMEM
]
- Insufficient memory is available to complete the
operation.
-
-
- [
ENOSR
]
- Insufficient STREAMS resources are available for the
operation to complete.
-
-
- [
ENOTSOCK
]
- s is not a socket.
-
-
- [
EWOULDBLOCK
]
- The socket is marked non-blocking and the requested
operation would block.
EWOULDBLOCK
is also returned when sufficient memory is not immediately available to
allocate a suitable buffer. In such a case, the operation can be retried
later.
-
-
- [
ECONNREFUSED
]
- The requested connection was refused by the peer. For
connected IPv4 and IPv6 datagram sockets, this indicates that the system
received an ICMP “Destination Port Unreachable” message from
the peer in response to some prior transmission.
The
send() and
sendto() functions return errors under the
following conditions:
-
-
- [
EINVAL
]
- The len argument overflows
a ssize_t.
Inconsistent port attributes for system call.
The
sendto() function returns errors under the
following conditions:
-
-
- [
EINVAL
]
- The value specified for the
tolen parameter is not the size of a
valid address for the specified address family.
-
-
- [
EISCON
]
- A destination address was specified and the socket is
already connected.
The
sendmsg() function returns errors under the
following conditions:
-
-
- [
EINVAL
]
- The msg_iovlen member of
the msghdr structure pointed to by
msg is less than or equal to 0, or the
sum of the iov_len values in the
msg_iov array overflows a
ssize_t.
One of the iov_len values in the
msg_iov array member of the
msghdr structure pointed to by
msg is negative, or the sum of the
iov_len values in the
msg_iov array overflows a
ssize_t.
msg_iov contents are inconsistent with port
attributes.
The
send() function returns errors under the
following conditions:
-
-
- [
EPIPE
]
- The socket is shut down for writing, or the socket is
connection-mode and is no longer connected. In the latter case, if the
socket is of type
SOCK_STREAM
, the
SIGPIPE
signal is generated to the
calling thread unless the MSG_NOSIGNAL
flag is set.
Safe
fcntl(2),
poll(2),
write(2),
connect(3C),
getsockopt(3C),
recv(3C),
select(3C),
sockaddr(3C),
socket(3C),
socket.h(3HEAD),
attributes(5)