Sends messages through a socket.
Standard C Library (libc.a)
The sendto subroutine allows an application program to send messages through an unconnected socket by specifying a destination address.
To broadcast on a socket, first issue a setsockopt subroutine using the SO_BROADCAST option to gain broadcast permissions.
Provide the address of the target using the To parameter. Specify the length of the message with the Length parameter. If the message is too long to pass through the underlying protocol, the error EMSGSIZE is returned and the message is not transmitted.
If the sending socket has no space to hold the message to be transmitted, the sendto subroutine blocks the message unless the socket is in a nonblocking I/O mode.
Use the select subroutine to determine when it is possible to send more data.
The socket applications can be compiled with COMPAT_43 defined. This will make the sockaddr structure BSD 4.3 compatible. For more details refer to socket.h.
Item | Description |
---|---|
Socket | Specifies the unique name for the socket. |
Message | Specifies the address containing the message to be sent. |
Length | Specifies the size of the message in bytes. |
Flags | Allows the sender to control the message transmission. The
Flags parameter used to send a call is formed by logically ORing
one or both of the following values:
Note:
The /usr/include/sys/socket.h file defines the Flags parameter. |
To | Specifies the destination address for the message. The destination address is a sockaddr structure defined in the /usr/include/sys/socket.h file. |
ToLength | Specifies the size of the destination address. |
Upon successful completion, the sendto subroutine returns the number of characters sent.
If the sendto subroutine is unsuccessful, the system returns a value of -1, and the errno global variable is set to indicate the error.
The subroutine is unsuccessful if any of the following errors occurs:
Error | Description |
---|---|
EACCES | Write access to the named socket is denied, or the socket trying to send a broadcast packet does not have broadcast capability. |
EADDRNOTAVAIL | The specified address is not a valid address. |
EAFNOSUPPORT | The specified address is not a valid address for the address family of this socket. |
EBADF | The Socket parameter is not valid. |
ECONNRESET | A connection was forcibly closed by a peer. |
EDESTADDRREQ | The socket is not in connection-mode and no peer address is set. |
EFAULT | The Address parameter is not in a writable part of the user address space. |
EHOSTUNREACH | The destination host cannot be reached. |
EINTR | A signal interrupted sendto before any data was transmitted. |
EINVAL | The Length or ToLength parameter is invalid. |
EISCONN | A SOCK_DGRAM socket is already connected. |
EMSGSIZE | The message is too large to be sent all at once as the socket requires. |
ENETUNREACH | The destination network is not reachable. |
ENOBUFS | The system ran out of memory for an internal data structure. |
ENOENT | The path name does not name an existing file, or the path name is an empty string. |
ENOMEM | The available data space in memory is not large enough to hold group/ACL information. |
ENOPROTOOPT | The protocol is not 64-bit supported. |
ENOTCONN | The socket is in connection-mode but is not connected. |
ENOTSOCK | The Socket parameter refers to a file, not a socket. |
EOPNOTSUPP | The socket argument is associated with a socket that does not support one or more of the values set in Flags. |
EPIPE | An attempt was made to send on a socket that was connected, but the connection has been shut down either by the remote peer or by this side of the connection. If the socket is of type SOCK_STREAM, the SIGPIPE signal is generated to the calling process. |
EWOULDBLOCK | The socket is marked nonblocking, and no connections are present to be accepted. |