summaryrefslogtreecommitdiff
path: root/docs/reference/src/sock/nng_sendmsg.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/reference/src/sock/nng_sendmsg.md')
-rw-r--r--docs/reference/src/sock/nng_sendmsg.md82
1 files changed, 82 insertions, 0 deletions
diff --git a/docs/reference/src/sock/nng_sendmsg.md b/docs/reference/src/sock/nng_sendmsg.md
new file mode 100644
index 00000000..31ad67de
--- /dev/null
+++ b/docs/reference/src/sock/nng_sendmsg.md
@@ -0,0 +1,82 @@
+# nng_sendmsg
+
+## NAME
+
+nng_sendmsg --- send message
+
+## SYNOPSIS
+
+```c
+#include <nng/nng.h>
+
+int nng_sendmsg(nng_socket s, nng_msg *msg, int flags);
+```
+
+## DESCRIPTION
+
+The `nng_sendmsg()` sends [message][msg] _msg_ using the [socket][socket] _s_.
+
+If the function returns zero, indicating it has accepted the message for
+delivery, then the _msg_ is owned by the socket _s_, and the caller
+must not make any further use of it.
+The socket will free the message when it is finished.
+
+If the function returns non-zero, then it is the caller's responsibility
+to dispose of the _msg_, which may include freeing it, sending it to
+another socket, or simply trying again later.
+
+> [!TIP]
+> Using this function gives access to the message structure, and may
+> offer more functionality than the simpler [`nng_send()`][nng_send] function. [^1] [^2]
+
+[^1]: It is also more efficient.
+[^2]: An asynchronous form of this function is available as [`nng_send_aio()`][nng_send_aio].
+
+> [!NOTE]
+> The semantics of what sending a message means vary from protocol to
+> protocol, so examination of the protocol documentation is encouraged.
+> Furthermore, some protocols may not support sending messages
+> or may require other conditions be met first before sending messages.
+
+The _flags_ may contain the following value:
+
+- {{i:`NNG_FLAG_NONBLOCK`}}:
+ The function returns immediately, regardless of whether
+ the socket is able to accept the data or not.
+ If the socket is unable to accept the data (such as if {{i:back-pressure}} exists
+ because the peers are consuming messages too slowly, or no peer is present),
+ then the function will return with `NNG_EAGAIN`.
+ If this flag is not specified, then the function will block if such a
+ condition exists.
+
+> [!NOTE]
+> Regardless of the presence or absence of `NNG_FLAG_NONBLOCK`, there may
+> be queues between the sender and the receiver.
+> Furthermore, there is no guarantee that the message has actually been delivered.
+> Finally, with some protocols, the semantic is implicitly `NNG_FLAG_NONBLOCK`,
+> such as with [_PUB_][pub] sockets, which are {{i:best-effort}} delivery only.
+
+## RETURN VALUES
+
+This function returns 0 on success, and non-zero otherwise.
+
+## ERRORS
+
+- `NNG_EAGAIN`: The operation would block, but `NNG_FLAG_NONBLOCK` was specified.
+- `NNG_ECLOSED`: The socket _s_ is not open.
+- `NNG_EINVAL`: An invalid set of _flags_ was specified.
+- `NNG_EMSGSIZE`: The value of _size_ is too large.
+- `NNG_ENOMEM`: Insufficient memory is available.
+- `NNG_ENOTSUP`: The protocol for socket _s_ does not support sending.
+- `NNG_ESTATE`: The socket _s_ cannot send data in this state.
+- `NNG_ETIMEDOUT`: The operation timed out.
+
+## SEE ALSO
+
+[Messages][msg],
+[Sockets][socket],
+[nng_msg_alloc][nng_msg_alloc],
+[nng_recvmsg][nng_recvmsg],
+[nng_send][nng_send]
+
+{{#include ../refs.md}}