sendmsg()
Send a message and its header to a socket
Synopsis:
#include <sys/types.h> #include <sys/socket.h> ssize_t sendmsg( int s, const struct msghdr * msg, int flags );
Arguments:
- s
- The descriptor for the socket; see socket() .
- msg
- A pointer to the message that you want to send. For a description of the msghdr structure, see recvmsg() .
- flags
- A combination of the following:
- MSG_OOB — process out-of-band data. Use this bit when you send out-of-band data on sockets that support this notion (e.g. SOCK_STREAM). The underlying protocol must also support out-of-band data.
- MSG_DONTROUTE — bypass routing; create a direct interface. You normally use this bit only in diagnostic or routing programs.
- MSG_NOSIGNAL — don't raise a SIGPIPE signal when the other end breaks the connection.
Library:
libsocket
Use the -l socket option to qcc to link against this library.
Description:
The sendmsg() function is used to transmit a message to another socket. You can use send() only when the socket is in a connected state; you can use sendmsg() at any time.
No indication of failure to deliver is implicit in a sendmsg(). Locally detected errors are indicated by a return value of -1.
If no message space is available at the socket to hold the message to be transmitted, then sendmsg() normally blocks, unless the socket has been placed in nonblocking I/O mode. You can use select() to determine when it's possible to send more data.
Returns:
The number of bytes sent, or -1 if an error occurs (errno is set).
Errors:
- EACCES
- Search permission is denied for a component of the path prefix, or write access to the named socket is denied.
- EAGAIN
- 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
- An invalid descriptor was specified.
- ECONNRESET
- A connection was forcibly closed by a peer.
- EDESTADDRREQ
- The socket isn't connection-mode and doesn't have its peer address set, and no destination address was specified.
- EFAULT
- An invalid user space address was specified for a parameter.
- EHOSTUNREACH
- The destination host can't be reached (probably because the host is down, or a remote router can't reach it).
- EINTR
- A signal interrupted sendmsg() before any data was transmitted.
- EINVAL
- The sum of the iov_len values overflows an ssize_t.
- EIO
- An I/O error occurred while reading from or writing to the filesystem.
- EISCONN
- A destination address was specified and the socket is already connected.
- 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.
- ENETDOWN
- The local network interface used to reach the destination is down.
- ENETUNREACH
- No route to the network is present.
- ENOBUFS
- The system couldn't allocate an internal buffer. The operation may succeed when buffers become available.
- ENOMEM
- Insufficient memory was available to fulfill the request.
- ENOTCONN
- The socket is connection-mode but isn't connected.
- ENOTSOCK
- The argument s isn't a socket.
- EOPNOTSUPP
- The s argument is associated with a socket that doesn't 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, a SIGPIPE signal is generated to the calling thread.
- EWOULDBLOCK
- The socket is marked nonblocking and the requested operation would block.
If the address family of the socket is AF_UNIX, sendmsg() fails if:
- EIO
- An I/O error occurred while reading from or writing to the filesystem.
- ELOOP
- A loop exists in symbolic links encountered during resolution of the pathname in the socket address, or more than SYMLOOP_MAX symbolic links were encountered during the resolution of the pathname in the socket address.
- ENAMETOOLONG
- A component of a pathname exceeded NAME_MAX characters, or an entire pathname exceeded PATH_MAX characters, or pathname resolution of a symbolic link produced an intermediate result whose length exceeds PATH_MAX.
- ENOENT
- A component of the pathname doesn't 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 isn't a directory.
Classification:
Safety: | |
---|---|
Cancellation point | Yes |
Interrupt handler | No |
Signal handler | No |
Thread | Yes |