summaryrefslogtreecommitdiff
path: root/docs/reference/src/sock/nng_send.md
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2024-03-31 11:28:24 -0700
committerGarrett D'Amore <garrett@damore.org>2024-03-31 11:28:24 -0700
commit309583d7b4171cf6851d4ba89e07909642180015 (patch)
treebf64e74e9666038e71db0c7826fe706977627cd8 /docs/reference/src/sock/nng_send.md
parent1bcf60a65ee56054e638c0859da1fe2418160bc6 (diff)
downloadnng-mdbook.tar.gz
nng-mdbook.tar.bz2
nng-mdbook.zip
nng_send*mdbook
Diffstat (limited to 'docs/reference/src/sock/nng_send.md')
-rw-r--r--docs/reference/src/sock/nng_send.md93
1 files changed, 93 insertions, 0 deletions
diff --git a/docs/reference/src/sock/nng_send.md b/docs/reference/src/sock/nng_send.md
new file mode 100644
index 00000000..c36cedbb
--- /dev/null
+++ b/docs/reference/src/sock/nng_send.md
@@ -0,0 +1,93 @@
+# nng_send
+
+## NAME
+
+nng_send --- send data
+
+## SYNOPSIS
+
+```c
+#include <nng/nng.h>
+
+int nng_send(nng_socket s, void *data, size_t size, int flags);
+```
+
+## DESCRIPTION
+
+The `nng_send()` function sends a message containing the _data_ of
+length _size_ using the [socket][socket] _s_.
+
+> [!NOTE]
+> The semantics of what sending a message means vary from protocol to
+> protocol, so examination of the protocol documentation is encouraged.
+> For example, on [_PUB_][pub] sockets the data is broadcast, so that
+> any peers who have a suitable subscription will be able to receive it.
+> Furthermore, some protocols may not support sending data
+> or may require other conditions.
+> For example, [_REP_][rep] sockets cannot normally send data
+> until they have first received a request.)
+
+The _flags_ may contain either of (or neither of) the following values:
+
+- {{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 backpressure 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.
+
+- {{i:`NNG_FLAG_ALLOC`}}: \
+ The _data_ was allocated using [`nng_alloc()`][nng_alloc], or was
+ obtained from a call to [`nng_recv()`][nng_recv] with
+ the `NNG_FLAG_ALLOC` flag.
+ If this function returns success, then the _data_ is "owned" by the
+ function, and it will assume responsibility for calling
+ [`nng_free()`][nng_free] when it is no longer needed.
+ In the absence of this flag, the _data_ is copied by the implementation
+ before the function returns to the caller.
+
+> [!TIP]
+> The `NNG_FLAG_ALLOC` flag can be used to reduce data copies, thereby
+> increasing performance. However, the [`nng_sendmsg()`][nng_sendmsg] function is even better in this regard, and should be preferred over this
+> function when possible.
+
+> [!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_ sockets, which are best-effort delivery only.
+
+> [!IMPORTANT]
+> When using `NNG_FLAG_ALLOC`, it is important that the value of _size_
+> match the actual allocated size of the data.
+> Using an incorrect size results
+> in unspecified behavior, which may include heap corruption, program crashes,
+> or teleportation of the program's author to an alternate universe.
+
+## 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
+
+[Sockets][socket],
+[nng_alloc][nng_alloc],
+[nng_free][nng_free],
+[nng_recv][nng_recv],
+[nng_send_aio][nng_send_aio],
+[nng_sendmsg][nng_sendmsg]
+
+{{#include ../refs.md}}