# sendmsg

## PROLOG



           This manual page is part of the POSIX Programmer's Manual.  The
           Linux implementation of this interface may differ (consult the
           corresponding Linux manual page for details of Linux behavior), or
           the interface may not be implemented on Linux.
    


## NAME



           sendmsg — send a message on a socket using a message structure
    


## SYNOPSIS



           #include <sys/socket.h>
    
           ssize_t sendmsg(int _socket_ , const struct msghdr *_message_ , int _flags_);
    


## DESCRIPTION



           The _sendmsg_() function shall send a message through a connection-
           mode or connectionless-mode socket. If the socket is a
           connectionless-mode socket, the message shall be sent to the
           address specified by **msghdr** if no pre-specified peer address has
           been set. If a peer address has been pre-specified, either the
           message shall be sent to the address specified in **msghdr**
           (overriding the pre-specified peer address), or the function shall
           return -1 and set _errno_ to **[EISCONN]**.  If the socket is
           connection-mode, the destination address in **msghdr** shall be
           ignored.
    
           The _sendmsg_() function takes the following arguments:
    
           _socket_      Specifies the socket file descriptor.
    
           _message_     Points to a **msghdr** structure, containing both the
                       destination address and the buffers for the outgoing
                       message. The length and format of the address depend
                       on the address family of the socket. The _msg_flags_
                       member is ignored.
    
           _flags_       Specifies the type of message transmission. The
                       application may specify 0 or the following flag:
    
                       MSG_EOR       Terminates a record (if supported by the
                                     protocol).
    
                       MSG_OOB       Sends out-of-band data on sockets that
                                     support out-of-bound data. The
                                     significance and semantics of out-of-
                                     band data are protocol-specific.
    
                       MSG_NOSIGNAL  Requests not to send the SIGPIPE signal
                                     if an attempt to send is made on a
                                     stream-oriented socket that is no longer
                                     connected. The **[EPIPE]** error shall still
                                     be returned.
    
           The _msg_iov_ and _msg_iovlen_ fields of _message_ specify zero or more
           buffers containing the data to be sent.  _msg_iov_ points to an
           array of **iovec** structures; _msg_iovlen_ shall be set to the
           dimension of this array. In each **iovec** structure, the _iov_base_
           field specifies a storage area and the _iov_len_ field gives its
           size in bytes. Some of these sizes can be zero. The data from each
           storage area indicated by _msg_iov_ is sent in turn.
    
           Successful completion of a call to _sendmsg_() does not guarantee
           delivery of the message. A return value of -1 indicates only
           locally-detected errors.
    
           If space is not available at the sending socket to hold the
           message to be transmitted and the socket file descriptor does not
           have O_NONBLOCK set, the _sendmsg_() function shall block until
           space is available. If space is not available at the sending
           socket to hold the message to be transmitted and the socket file
           descriptor does have O_NONBLOCK set, the _sendmsg_() function shall
           fail.
    
           If the socket protocol supports broadcast and the specified
           address is a broadcast address for the socket protocol, _sendmsg_()
           shall fail if the SO_BROADCAST option is not set for the socket.
    
           The socket in use may require the process to have appropriate
           privileges to use the _sendmsg_() function.
    


## RETURN VALUE



           Upon successful completion, _sendmsg_() shall return the number of
           bytes sent. Otherwise, -1 shall be returned and _errno_ set to
           indicate the error.
    


## ERRORS



           The _sendmsg_() function shall fail if:
    
           **EAGAIN** or **EWOULDBLOCK**
                  The socket's file descriptor is marked O_NONBLOCK and the
                  requested operation would block.
    
           **EAFNOSUPPORT**
                  Addresses in the specified address family cannot be used
                  with this socket.
    
           **EBADF** The _socket_ argument is not a valid file descriptor.
    
           **ECONNRESET**
                  A connection was forcibly closed by a peer.
    
           **EINTR** A signal interrupted _sendmsg_() before any data was
                  transmitted.
    
           **EINVAL** The sum of the _iov_len_ values overflows an **ssize_t**.
    
           **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}.
    
           **ENOTCONN**
                  The socket is connection-mode but is not connected.
    
           **ENOTSOCK**
                  The _socket_ argument does not refer to 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** The socket is shut down for writing, or the socket is
                  connection-mode and is no longer connected. In the latter
                  case, and if the socket is of type SOCK_STREAM or
                  SOCK_SEQPACKET and the MSG_NOSIGNAL flag is not set, the
                  SIGPIPE signal is generated to the calling thread.
    
           If the address family of the socket is AF_UNIX, then _sendmsg_()
           shall fail if:
    
           **EIO** An I/O error occurred while reading from or writing to the
                  file system.
    
           **ELOOP** A loop exists in symbolic links encountered during
                  resolution of the pathname in the socket address.
    
           **ENAMETOOLONG**
                  The length of a component of a pathname is longer than
                  {NAME_MAX}.
    
           **ENOENT** A component of the pathname does not name an existing file
                  or the path name is an empty string.
    
           **ENOTDIR**
                  A component of the path prefix of the pathname in the
                  socket address names an existing file that is neither a
                  directory nor a symbolic link to a directory, or the
                  pathname in the socket address contains at least one
                  non-<slash> character and ends with one or more trailing
                  <slash> characters and the last pathname component names an
                  existing file that is neither a directory nor a symbolic
                  link to a directory.
    
           The _sendmsg_() function may fail if:
    
           **EACCES** Search permission is denied for a component of the path
                  prefix; or write access to the named socket is denied.
    
           **EDESTADDRREQ**
                  The socket is not connection-mode and does not have its
                  peer address set, and no destination address was specified.
    
           **EHOSTUNREACH**
                  The destination host cannot be reached (probably because
                  the host is down or a remote router cannot reach it).
    
           **EIO** An I/O error occurred while reading from or writing to the
                  file system.
    
           **EISCONN**
                  A destination address was specified and the socket is
                  already connected.
    
           **ENETDOWN**
                  The local network interface used to reach the destination
                  is down.
    
           **ENETUNREACH**
                  No route to the network is present.
    
           **ENOBUFS**
                  Insufficient resources were available in the system to
                  perform the operation.
    
           **ENOMEM** Insufficient memory was available to fulfill the request.
    
           If the address family of the socket is AF_UNIX, then _sendmsg_() may
           fail if:
    
           **ELOOP** More than {SYMLOOP_MAX} symbolic links were encountered
                  during resolution of the pathname in the socket address.
    
           **ENAMETOOLONG**
                  The length of a pathname exceeds {PATH_MAX}, or pathname
                  resolution of a symbolic link produced an intermediate
                  result with a length that exceeds {PATH_MAX}.
    
           _The following sections are informative._
    


## EXAMPLES



           Done.
    


## APPLICATION USAGE



           The _select_() and _poll_() functions can be used to determine when it
           is possible to send more data.
    


## RATIONALE



           None.
    


## FUTURE DIRECTIONS



           None.
    


* * *