send()--Send Data



Syntax
#include <sys/types.h>
#include <sys/socket.h>

int send(int socket_descriptor,
         char *buffer,
         int buffer_length,
         int flags)


Threadsafe: Yes

The send() function is used to send data through a connected socket.

Parameters

socket_descriptor
(Input) The socket descriptor that is to be written to.

buffer
(Input) The pointer to the buffer in which the data that is to be written is stored.

buffer_length
(Input) The length of the buffer.

flags
(Input) A flag value that controls the transmission of the data. The flags value is either zero, or is obtained by performing an OR operation on the following constants:
MSG_OOB
Send data as out-of-band data. Valid only for sockets with an address family of AF_INET and type SOCK_STREAM.
MSG_DONTROUTE
Bypass routing. Valid only for sockets with address family of AF_NS or AF_INET. It is ignored for other address families.

Return Value

send() returns an integer. Possible values are:

Error Conditions

When send() fails, errno can be set to one of the following:

[EACCES]
Permission denied.

This error code indicates one of the following:

[EBADF]
Descriptor not valid.
[ECONNREFUSED]
The destination socket refused an attempted connect operation.

This error code can only be returned on sockets that use a connectionless transport service.

[EDESTADDRREQ]
Operation requires destination address.

A destination address has not been associated with the socket pointed to by the socket_descriptor parameter. This error code can only be returned on sockets that use a connectionless transport service.

[EFAULT]
Bad address.

The system detected an address which was not valid while attempting to access the buffer parameter.

[EHOSTDOWN]
A remote host is not available.

This error code can only be returned on sockets that use a connectionless transport service.

[EHOSTUNREACH]
A route to the remote host is not available.

This error code can only be returned on sockets that use a connectionless transport service.

[EINTR]
Interrupted function call.
[EINVAL]
Parameter not valid.

The buffer_length parameter specifies a negative value.

[EIO]
Input/output error.
[EMSGSIZE]
Message size out of range.

The data to be sent could not be sent atomically because the size specified by buffer_length is too large.

[ENETDOWN]
The network is not currently available.

This error code can only be returned on sockets that use a connectionless transport service.

[ENETUNREACH]
Cannot reach the destination network.

This error code can only be returned on sockets that use a connectionless transport service.

[ENOBUFS]
There is not enough buffer space for the requested operation.
[ENOTCONN]
Requested operation requires a connection.

This error code can only be returned on sockets that use a connection-oriented transport service.

[ENOTSOCK]
The specified descriptor does not reference a socket.
[EOPNOTSUPP]
Operation not supported.

This error code indicates one of the following:

[EPIPE]
Broken pipe.
[EUNATCH]
The protocol required to support the specified address family is not available at this time.
[EUNKNOWN]
Unknown system state.
[EWOULDBLOCK]
Operation would have caused the thread to be suspended.

Error Messages

CPE3418 E
Possible APAR condition or hardware failure.
CPF9872 E
Program or service program &1 in library &2 ended. Reason code &3.
CPFA081 E
Unable to set return value or error code.

Usage Notes

  1. send() only works with sockets on which a connect() has been issued, since it does not allow the caller to specify a destination address.

  2. To broadcast on an AF_INET socket, the socket option SO_BROADCAST must be set (with a setsockopt()).

  3. When using a connection-oriented transport service, all errors except [EUNATCH] and [EUNKNOWN] are mapped to [EPIPE] on an output operation when either of the following occurs: To get the actual error, use getsockopt() with the SO_ERROR option, or perform an input operation (for example, read()).

Related Information


Top | Sockets APIs | APIs by category


[Information Center Home Page | Feedback ] [Legal | AS/400 Glossary]