SEND(3SOCKET) Sockets Library Functions SEND(3SOCKET)
NAME
send, sendto, sendmsg - send a message from a socket
SYNOPSIS
cc [
flag... ]
file...
-lsocket -lnsl [
library... ]
#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,
int tolen);
ssize_t sendmsg(
int s,
const struct msghdr *msg,
int flags);
DESCRIPTION
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(3SOCKET). The
sendto() and
sendmsg() functions can be used at any time. The
s socket is
created with
socket(3SOCKET).
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.
The
sendmsg() function call uses a
msghdr structure defined in
<
sys/socket.h> to minimize the number of directly supplied parameters.
RETURN VALUES
Upon successful completion, these functions return the number of bytes
sent. Otherwise, they return
-1 and set
errno to indicate the error.
ERRORS
In addition to the errors documented below, an asynchronous error
generated by the underlying socket protocol may be returned. For the full
list of errors, please see the corresponding socket protocol manual page.
For example, for a list of TCP errors, please see
tcp(4P).
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.
ATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+--------------------+-----------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-----------------+
|Interface Stability | Committed |
+--------------------+-----------------+
|MT-Level | Safe |
+--------------------+-----------------+
SEE ALSO
fcntl(2),
poll(2),
write(2),
select(3C),
socket.h(3HEAD),
connect(3SOCKET),
getsockopt(3SOCKET),
recv(3SOCKET),
sockaddr(3SOCKET),
socket(3SOCKET),
tcp(4P),
attributes(7) September 10, 2018
SEND(3SOCKET)