summaryrefslogtreecommitdiff
path: root/docs/reference/src/sock/nng_send.3.adoc
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2024-03-31 10:58:17 -0700
committerGarrett D'Amore <garrett@damore.org>2024-03-31 10:58:17 -0700
commit1bcf60a65ee56054e638c0859da1fe2418160bc6 (patch)
tree6c4d324388c057260416158137fba9f203e038e2 /docs/reference/src/sock/nng_send.3.adoc
parentf7787f8cc26b211f68dda3180a112ba3074ca638 (diff)
downloadnng-1bcf60a65ee56054e638c0859da1fe2418160bc6.tar.gz
nng-1bcf60a65ee56054e638c0859da1fe2418160bc6.tar.bz2
nng-1bcf60a65ee56054e638c0859da1fe2418160bc6.zip
nng_recv* added
Diffstat (limited to 'docs/reference/src/sock/nng_send.3.adoc')
-rw-r--r--docs/reference/src/sock/nng_send.3.adoc90
1 files changed, 90 insertions, 0 deletions
diff --git a/docs/reference/src/sock/nng_send.3.adoc b/docs/reference/src/sock/nng_send.3.adoc
new file mode 100644
index 00000000..4932712a
--- /dev/null
+++ b/docs/reference/src/sock/nng_send.3.adoc
@@ -0,0 +1,90 @@
+# nng_send
+
+## NAME
+
+nng_send --- send data
+
+## SYNOPSIS
+
+```
+#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 xref:nng_socket.5.adoc[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, with an xref:nng_pub.7.adoc[_pub_] socket the data is broadcast, so that
+any peers who have a suitable subscription will be able to receive it using
+xref:nng_recv.3.adoc[`nng_recv()`] or a similar function.)
+Furthermore, some protocols may not support sending data (such as
+xref:nng_sub.7.adoc[_sub_]) or may require other conditions.
+(For example, xref:nng_rep.7.adoc[_rep_] sockets cannot normally send data,
+which are responses to requests, until they have first received a request.)
+
+The _flags_ may contain either of (or neither of) the following values:
+
+`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.
+
+`NNG_FLAG_ALLOC`::
+ The _data_ was allocated using xref:nng_alloc.3.adoc[`nng_alloc()`], or was
+ obtained from a call to xref:nng_recv.3.adoc[`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
+ xref:nng_free.3.adoc[`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.
+
+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 xref:nng_pub.7.adoc[_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 trans-dimensional mutation of the program's author.
+
+## 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
+
+[nng_alloc][nng_alloc],
+[nng_free][nng_free],
+[nng_recv][nng_recv],
+[nng_sendmsg][nng_sendmsg],
+[nng_strerror][nng_strerror],
+[nng_socket][nng_socket],
+[nng][nng]
+
+{{#include ../refs.md}}