diff options
Diffstat (limited to 'docs/ref')
| -rw-r--r-- | docs/ref/api/id_map.md | 17 | ||||
| -rw-r--r-- | docs/ref/api/memory.md | 24 | ||||
| -rw-r--r-- | docs/ref/api/misc.md | 4 | ||||
| -rw-r--r-- | docs/ref/api/msg.md | 28 | ||||
| -rw-r--r-- | docs/ref/api/stats.md | 55 | ||||
| -rw-r--r-- | docs/ref/api/synch.md | 30 | ||||
| -rw-r--r-- | docs/ref/api/thread.md | 5 | ||||
| -rw-r--r-- | docs/ref/api/time.md | 7 | ||||
| -rw-r--r-- | docs/ref/api/url.md | 4 | ||||
| -rw-r--r-- | docs/ref/xref.md | 115 |
10 files changed, 181 insertions, 108 deletions
diff --git a/docs/ref/api/id_map.md b/docs/ref/api/id_map.md index d386156d..0e5c1eac 100644 --- a/docs/ref/api/id_map.md +++ b/docs/ref/api/id_map.md @@ -31,7 +31,7 @@ themselves be much larger than this.}} > [!IMPORTANT] > The function available for `nng_id_map` are _not_ thread-safe. -> Callers should use a [mutex][nng_mutex] or similar approach when thread-safety is needed. +> Callers should use a [mutex] or similar approach when thread-safety is needed. ## Create ID Map @@ -55,7 +55,7 @@ the same identifiers at the same time. If both _lo_ and _hi_ are zero, then the values `0` and `0xffffffff` are substituted in their place, giving a full range of 32-bit identifiers. -This function can return `NNG_ENOMEM` if it is unable to allocate resources, otherwise +This function can return [`NNG_ENOMEM`] if it is unable to allocate resources, otherwise it returns zero on success. ## Destroy Map @@ -87,7 +87,7 @@ _value_. > The _value_ must not be `NULL`. If the table has to grow to accommodate this value, it may fail if insufficient -memory is available, returning `NNG_ENOMEM`. OtherwiseG it returns zero. +memory is available, returning [`NNG_ENOMEM`]. Otherwise it returns zero. ## Lookup a Value @@ -115,11 +115,11 @@ when they were freed.{{footnote: The concern about possibly reusing a recently released identifier comes into consideration after the range has wrapped. Given a sufficiently large range, this is unlikely to be a concern.}} -As with [`nng_id_set`][nng_id_set], this may need to allocate memory and can thus -fail with `NNG_ENOMEM`. +As with [`nng_id_set`], this may need to allocate memory and can thus +fail with [`NNG_ENOMEM`]. Additionally, if there are no more free identifiers within the range specified -when _map_ was created, then it will return `NNG_ENOSPC`. +when _map_ was created, then it will return [`NNG_ENOSPC`]. Otherwise it returns zero, indicating success. @@ -131,7 +131,7 @@ int nng_id_remove(nng_id_map *map, uint64_t id); The {{i:`nng_id_remove`}} removes the entry at index _id_ from _map_. -If no such entry exist, it will return `NNG_ENOENT`. Otherwise it returns zero. +If no such entry exist, it will return [`NNG_ENOENT`]. Otherwise it returns zero. ## Iterating IDs @@ -155,5 +155,4 @@ iteration is undefined; entries may be repeated or omitted during such an iterat The caller must not attempt to derive any value of the _cursor_ as it refers to internal table indices. -[nng_id_set]: #store-a-value -[nng_mutex]: synch.md#mutual-exclusion-lock +{{#include ../xref.md}} diff --git a/docs/ref/api/memory.md b/docs/ref/api/memory.md index fb7ec18e..c5ecb23a 100644 --- a/docs/ref/api/memory.md +++ b/docs/ref/api/memory.md @@ -17,11 +17,11 @@ The memory will be 64-bit aligned. Note that the memory may have random data in it, just like with `malloc`. If memory cannot be allocated for any reason, then `NULL` will be returned. -Applications that experience this should treat this like `NNG_ENOMEM`. +Applications that experience this should treat this like [`NNG_ENOMEM`]. Memory returned by `nng_alloc` can be used to hold message buffers, in which -case it can be directly passed to [`nng_send`][nng_send] using the flag `NNG_FLAG_ALLOC`. -Alternatively, it can be freed when no longer needed using [`nng_free`][nng_free]. +case it can be directly passed to [`nng_send`] using the flag `NNG_FLAG_ALLOC`. +Alternatively, it can be freed when no longer needed using [`nng_free`]. > [!IMPORTANT] > Do not use the system `free` function (or the C++ `delete` operator) to release this memory. @@ -34,10 +34,10 @@ Alternatively, it can be freed when no longer needed using [`nng_free`][nng_free void nng_free(void *ptr, size_t size); ``` -The {{i:`nng_free`}} function deallocates memory previously allocated by [`nng_alloc`][nng_alloc]. +The {{i:`nng_free`}} function deallocates memory previously allocated by [`nng_alloc`]. The _size_ argument must exactly match the _size_ argument that was supplied to -`nng_alloc` when the memory was allocated. +[`nng_alloc`] when the memory was allocated. ## Duplicate String @@ -47,14 +47,14 @@ char *nng_strdup(const char *src); The {{i:`nng_strdup`}} duplicates the string _src_ and returns it. -This is logically equivalent to using [`nng_alloc`][nng_alloc] +This is logically equivalent to using [`nng_alloc`] to allocate a region of memory of `strlen(s) + 1` bytes, and then using `strcpy` to copy the string into the destination before returning it. The returned string should be deallocated with -[`nng_strfree`][nng_strfree], or may be deallocated using the -[`nng_free`][nng_free] using the length of the returned string plus +[`nng_strfree`], or may be deallocated using the +[`nng_free`] using the length of the returned string plus one (for the `NUL` terminating byte). ## Free String @@ -64,12 +64,8 @@ void nng_strfree(char *str); ``` The {{i:`nng_strfree`}} function is a convenience function that -can be used to deallocate strings allocated with [`nng_strdup`][nng_strdup]. +can be used to deallocate strings allocated with [`nng_strdup`]. It is effectively the same as `nng_free(strlen(str) + 1)`. -[nng_alloc]: #allocate-memory -[nng_free]: #deallocate-memory -[nng_strdup]: #duplicate-string -[nng_strfree]: #free-string -[nng_send]: TODO.md +{{#include ../xref.md}} diff --git a/docs/ref/api/misc.md b/docs/ref/api/misc.md index 788c0b6d..4e7aec94 100644 --- a/docs/ref/api/misc.md +++ b/docs/ref/api/misc.md @@ -22,7 +22,7 @@ int nng_socket_pair(int fds[2]); The `nng_socket_pair` function creates a pair of connected file descriptors. These file descriptors, which are returned in the _fds_ array, are suitable for -use with the [Socket transport][socket]. +use with the [Socket transport][socktran]. On POSIX platforms, this is a thin wrapper around the standard `socketpair` function, using the {{i:`AF_UNIX`}} family and the `SOCK_STREAM` socket type. @@ -58,4 +58,4 @@ the version numbers reported refer to both the API and the library itself. library and the application is controlled in a similar, but different manner depending upon the link options and how the library is built.) -[socket]: ../tran/socket.md +{{#include ../xref.md}} diff --git a/docs/ref/api/msg.md b/docs/ref/api/msg.md index 1a29aeb2..0ded6504 100644 --- a/docs/ref/api/msg.md +++ b/docs/ref/api/msg.md @@ -30,7 +30,7 @@ The {{i:`nng_msg_alloc`}} function allocates a new message. It takes a _size_ argument, and returns a message with a preallocated body of that size in the _msgp_ parameter. -If it succeeds, it returns zero, otherwise this function may return `NNG_ENOMEM`, +If it succeeds, it returns zero, otherwise this function may return [`NNG_ENOMEM`], indicating that insufficient memory is available to allocate a new message. ### Destroy a Message @@ -48,7 +48,7 @@ int nng_msg_dup(nng_msg **dup, nng_msg *msg); ``` The {{i:`nng_msg_dup`}} function duplicates the message _msg_, storing a pointer -to the new duplicate in _dup_. This function also returns zero on succes, or `NNG_ENOMEM` +to the new duplicate in _dup_. This function also returns zero on succes, or [`NNG_ENOMEM`] if memory is exhausted. ## Message Size and Capacity @@ -79,14 +79,13 @@ preserving contents while doing so. If the new size is smaller than the original message, it will truncate the message, but not perform any allocations. If reallocation fails due to insufficient memory, then the original is left intact. -This function returns either zero, or `NNG_ENOMEM`. The {{i:`nng_msg_reserve`}} function ensures that the total message capacity is at least _capacity_ bytes. Use of this function to ensure the total anticipated capacity is present in the message may help prevent many small allocations. Both `nng_msg_realloc` and `nng_msg_reserve` return zero on success, or may return -`NNG_ENOMEM` if insufficient memory exists to preform allocation. +[`NNG_ENOMEM`] if insufficient memory exists to preform allocation. > [!IMPORTANT] > Any pointers to message content obtained before a call to `nng_msg_realloc` or @@ -205,16 +204,16 @@ The {{i:`nng_msg_header_clear`}} simply resets the total message header length t Appending data to a message header is done by using the {{i:`nng_msg_header_append`}} functions, and inserting data in the header is done using the {{i:`nng_msg_header_insert`}} functions. -These functions act just like the [`nng_msg_append`][nng_msg_append] and [`nng_msg_insert`][nng_msg_insert] -functions, except that they operate on the message header rather than the message body. +These functions act just like the [`nng_msg_append`] and [`nng_msg_insert`] functions, +except that they operate on the message header rather than the message body. ### Consume from Header The {{i:`nng_msg_header_trim`}} functions remove data from the beginning of the message header, and the {{i:`nng_msg_header_chop`}} functions remove data from the end of the message header. -These functions act just like the [`nng_msg_trim`][nng_msg_trim] and [`nng_msg_chop`][nng_msg_chop] -functions, except that they operate the message header rather than the message body. +These functions act just like the [`nng_msg_trim`] and [`nng_msg_chop`] functions, +except that they operate the message header rather than the message body. ## Message Pipe @@ -223,7 +222,7 @@ nng_pipe nng_msg_get_pipe(nng_msg *msg); void nng_msg_get_pipe(nng_msg *msg, nng_pipe p); ``` -The {{i:`nng_msg_set_pipe`}} function sets the [pipe][pipe] associated with _msg_ to _p_. +The {{i:`nng_msg_set_pipe`}} function sets the [pipe] associated with _msg_ to _p_. This is most often useful when used with protocols that support directing a message to a specific peer. For example the [_PAIR_][pair] version 1 protocol can do @@ -262,13 +261,4 @@ either directly by the application, or when the message was received by the prot } ``` -[nng_msg_body]: #message-body -[nng_msg_header]: #message-header -[nng_msg_append]: #add-to-body -[nng_msg_insert]: #add-to-body -[nng_msg_trim]: #consume-from-body -[nng_msg_chop]: #consume-from-body -[nng_msg_header_append]: #append-or-insert-header -[raw]: TODO.md -[pair]: ../proto/pair.md -[pipe]: TODO.md +{{#include ../xref.md}} diff --git a/docs/ref/api/stats.md b/docs/ref/api/stats.md index 520e0ab6..2e0acfcd 100644 --- a/docs/ref/api/stats.md +++ b/docs/ref/api/stats.md @@ -36,7 +36,7 @@ int nng_stats_get(nng_stat **statsp); The {{i:`nng_stats_get`}} function takes a snapshot of the statistics for the system and returns it through the pointer _statsp_. -This function may return `NNG_ENOMEM` if memory is exhausted, or `NNG_ENOTSUP` if the statistics +This function may return [`NNG_ENOMEM`] if memory is exhausted, or [`NNG_ENOTSUP`] if the statistics support is not enabled in the build, but is otherwise expected to return zero. ## Freeing a Snapshot @@ -77,8 +77,8 @@ const nng_stat *nng_stat_find_socket(const nng_stat *stat, nng_dialer socket); ``` Sometimes it is easiest to search for a specific statistic, matching by name, -or possibly to find the tree of statistics associated iwth a specific [socket][nng_socket], -[dialer][nng_dialer], or [listener][nng_listener]. +or possibly to find the tree of statistics associated iwth a specific [socket], +[dialer], or [listener]. The `nng_stat_find` functions are provided for this purpose. @@ -121,8 +121,8 @@ function can be used to obtain that value. The statistic is a counter that only increments. Usually the change in the value of the statistic is more interesting (as a rate) than the absolute value at any given time. The value should - be obtained using [`nng_stat_value`][nng_stat_value]. - The units will be given by the value returned from [`nng_stat_unit`][nng_stat_unit]. + be obtained using [`nng_stat_value`]. + The units will be given by the value returned from [`nng_stat_unit`]. - {{i:`NNG_STAT_LEVEL`}}: <a name="NNG_STAT_LEVEL"></a> The statistic represnts a measured value which corresponds @@ -130,22 +130,22 @@ function can be used to obtain that value. number of messages currently queued for some operation, or the link speed of a network interface. Most often the absolute value is more interesting than the change in the value over time. Again the value can be obtained with - [`nng_stat_value`][nng_stat_value], and any appropriate unit of measurement - with [`nng_stat_unit`][nng_stat_unit]. + [`nng_stat_value`], and any appropriate unit of measurement + with [`nng_stat_unit`]. - {{i:`NNG_STAT_STRING`}}: <a name="NNG_STAT_STRING"></a> The statistic is a string, such as a name. The value - of the string can be obtained with [`nng_stat_string`][nng_stat_string]. + of the string can be obtained with [`nng_stat_string`]. The value of this string - will remain valid until the snapshot is deallocated with [`nng_stats_free`][nng_stats_free]. + will remain valid until the snapshot is deallocated with [`nng_stats_free`]. - {{i:`NNG_STAT_BOOLEAN`}}: <a name="NNG_STAT_BOOLEAN"></a> The value of the statistic is a truth value (either `true` - or `false`) and can be obtained with [`nng_stat_bool`][nng_stat_bool]. + or `false`) and can be obtained with [`nng_stat_bool`]. - {{i:`NNG_STAT_ID`}}: <a name="NNG_STAT_ID"></a> The value of the statistic is a numeric identifier, such as a socket - identifier. The value can be obtained with [`nng_stat_value`][nng_stat_value], + identifier. The value can be obtained with [`nng_stat_value`], and will be fixed for the life of the statistic. ## Statistic Value @@ -159,15 +159,15 @@ bool nng_stat_bool(const nng_stat *stat); These functions return the value associated with the statistic. The {{i:`nng_stat_value`}} function returns the the numeric value for the statistic _stat_ -of type [`NNG_STAT_COUNTER`][NNG_STAT_COUNTER], [`NNG_STAT_LEVEL`][NNG_STAT_LEVEL], or [`NNG_STAT_ID`][NNG_STAT_ID]. +of type [`NNG_STAT_COUNTER`], [`NNG_STAT_LEVEL`], or [`NNG_STAT_ID`]. If _stat_ is not one of these types, then it returns zero. The {{i:`nng_stat_bool`}} function returns the Boolean value (either `true` or `false`) for the statistic _stat_ of -type [`NNG_STAT_BOOLEAN`][NNG_STAT_BOOLEAN]. If the statistics is not of this type, then it returns `false`. +type [`NNG_STAT_BOOLEAN`]. If the statistics is not of this type, then it returns `false`. The {{i:`nng_stat_string`}} function returns a pointer to a string value for the statistic _stat_, -of type [`NNG_STAT_STRING`][NNG_STAT_STRING]. This string will remain valud until the snapshot that -_stat_ was collected with is deallocated with [`nng_stats_free`][nng_stats_free]. If the statistic +of type [`NNG_STAT_STRING`]. This string will remain valud until the snapshot that +_stat_ was collected with is deallocated with [`nng_stats_free`]. If the statistic is not of type `NNG_STAT_STRING`, then `NULL` is returned. ## Statistic Units @@ -176,7 +176,7 @@ is not of type `NNG_STAT_STRING`, then `NULL` is returned. int nng_stat_unit(const nng_stat *stat); ``` -For statistics of type [`NNG_STAT_COUNTER`][NNG_STAT_COUNTER] or [`NNG_STAT_LEVEL`][NNG_STAT_LEVEL], +For statistics of type [`NNG_STAT_COUNTER`] or [`NNG_STAT_LEVEL`], it is often useful to know what that quantity being reported measures. The following units may be returned from {{i:`nng_stat_unit`}} for such a statistic: @@ -195,25 +195,10 @@ uint64_t nng_stat_timestamp(const nng_stat *stat); Statistics have a timestamp indicating when the value was sampled, obtained via {{i:`nng_stat_timestamp`}}. The timestamp is given in in milliseconds since a reference time, and the reference time used -here is the same reference time used for [`nng_clock`][nng_clock]. +here is the same reference time used for [`nng_clock`]. ## See Also -[`nng_clock`][nng_clock] - -[nng_stat_type]: #statistic-type -[nng_stats_free]: #freeing-a-snapshot -[nng_stat_value]: #statistic-value -[nng_stat_bool]: #statistic-value -[nng_stat_string]: #statistic-value -[nng_stat_unit]: #statistic-units -[NNG_STAT_ID]: #NNG_STAT_ID -[NNG_STAT_COUNTER]: #NNG_STAT_COUNTER -[NNG_STAT_LEVEL]: #NNG_STAT_LEVEL -[NNG_STAT_SCOPE]: #NNG_STAT_SCOPE -[NNG_STAT_STRING]: #NNG_STAT_STRING -[NNG_STAT_BOOLEAN]: #NNG_STAT_BOOLEAN -[nng_clock]: ./time.md#getting-the-current-time -[nng_socket]: TODO.md -[nng_dialer]: TODO.md -[nng_listener]: TODO.md +[`nng_clock`] + +{{#include ../xref.md}} diff --git a/docs/ref/api/synch.md b/docs/ref/api/synch.md index 965b34da..82eee869 100644 --- a/docs/ref/api/synch.md +++ b/docs/ref/api/synch.md @@ -16,9 +16,9 @@ typedef struct nng_mtx nng_mtx; ``` Mutual exclusion locks, or {{i:mutex}} locks, represented by the {{i:`nng_mtx`}} structure, -allow only a single thread to lock "own" the lock, acquired by [`nng_mtx_lock`][nng_mtx_lock]. +allow only a single [thread] to lock "own" the lock, acquired by [`nng_mtx_lock`]. Any other thread trying to acquire the same mutex will wait until the owner has released the mutex -by calling [`nng_mtx_unlock`][nng_mtx_unlock]. +by calling [`nng_mtx_unlock`]. ### Creating a Mutex @@ -29,7 +29,7 @@ int nng_mutx_alloc(nng_mt **mtxp); A mutex can be created by allocating one with {{i:`nng_mtx_lock`}}. On success, a pointer to the mutex is returned through _mtxp_. This function can fail due to insufficient memory or resources, in which -case it will return `NNG_ENOMEM`. Otherwise it will succceed and return zero. +case it will return [`NNG_ENOMEM`]. Otherwise it will succceed and return zero. ### Destroying a Mutex @@ -39,7 +39,7 @@ void nng_mtx_free(nng_mtx *mtx); When no longer needed, a mutex can be deallocated and its resources returned to the caller, by calling {{i:`nng_mtx_free`}}. The mutex must not be locked -by any thread when calling this function. +by any [thread] when calling this function. ### Acquiring a Mutex @@ -61,7 +61,7 @@ void nng_mtx_unlock(nng_mtx *mtx); ``` The {{i:`nng_mtx_unlock`}} function releases a mutex that the calling thread has previously -acquired with [`nng_mtx_lock`][nng_mtx_lock]. +acquired with [`nng_mtx_lock`]. > [!IMPORTANT] > A thread must not attempt to release (unlock) a mutex if it was not the thread @@ -74,7 +74,7 @@ typedef struct nng_cv nng_cv; ``` The {{i:`nng_cv`}} structure implements a {{i:condition variable}}, associated with the -the [mutex][nng_mtx] _mtx_ which was supplied when it was created. +the [mutex] _mtx_ which was supplied when it was created. Condition variables provide for a way to wait on an arbitrary condition, and to be woken when the condition is signaled. @@ -112,11 +112,11 @@ void nng_cv_wait(nng_cv *cv); The {{i:`nng_cv_until`}} and {{i:`nng_cv_wait`}} functions put the caller to sleep until the condition variable _cv_ is signaled, or (in the case of `nng_cv_until`), the specified time _when_ -(as determined by [`nng_clock`][nng_clock] is reached. +(as determined by [`nng_clock`] is reached. While `nng_cv_wait` never fails and so has no return value, the `nng_cv_until` function can -return `NNG_ETIMEDOUT` if the time is reached before condition _cv_ is signaled by -either [`nng_cv_wake`][nng_cv_wake] or [`nng_cv_wake1`][nng_cv_wake]. +return [`NNG_ETIMEDOUT`] if the time is reached before condition _cv_ is signaled by +either [`nng_cv_wake`] or [`nng_cv_wake1`]. ### Signaling the Condition @@ -126,7 +126,7 @@ void nng_cv_wake1(nng_cv *cv); ``` The {{i:`nng_cv_wake`}} and {{i:`nng_cv_wake1`}} functions wake threads waiting in -[`nng_cv_until`][nng_cv_wait] or [`nng_cv_wait`][nng_cv_wait]. +[`nng_cv_until`] or [`nng_cv_wait`]. The difference between these functions is that `nng_cv_wake` will wake _every_ thread, whereas `nng_cv_wake1` will wake up exactly one thread (which may be chosen randomly). @@ -171,12 +171,4 @@ one thread (which may be chosen randomly). nng_mtx_unlock(m); ``` -[aio]: aio.md -[thread]: thread.md -[nng_mtx]: #mutual-exclusion-lock -[nng_mtx_lock]: #acquiring-a-mutex -[nng_mtx_unlock]: #releasing-a-mutex -[nng_cv]: #condition-variable -[nng_cv_wait]: #waiting-for-the-condition -[nng_cv_wake]: #signaling-the-condition -[nng_clock]: ./time.md#getting-the-current-time +{{#include ../xref.md}} diff --git a/docs/ref/api/thread.md b/docs/ref/api/thread.md index 7d1b2f65..3286f71a 100644 --- a/docs/ref/api/thread.md +++ b/docs/ref/api/thread.md @@ -24,7 +24,7 @@ applications. > The system may impose limits on the number of threads that can be created. > Typically applications should not create more than a dozen of these. > If greater concurrency or scalability is needed, consider instead using -> an asynchronous model using [`nng_aio`][aio] structures. +> an asynchronous model using [`nng_aio`] structures. ## Thread Structure @@ -84,5 +84,4 @@ in debuggers. Not all platforms support setting the thread name. [Synchronization][synchronization], [Asynchronous Operations][aio] -[synchronization]: ../api/synch.md -[aio]: TODO.md +{{#include ../xref.md}} diff --git a/docs/ref/api/time.md b/docs/ref/api/time.md index 88e1f805..64d4039f 100644 --- a/docs/ref/api/time.md +++ b/docs/ref/api/time.md @@ -71,8 +71,7 @@ number of milliseconds. ## See Also -[`nng_cv_until`][nng_cv_until], -[`nng_sleep_aio`][nng_sleep_aio] +[`nng_cv_until`], +[`nng_sleep_aio`] -[nng_cv_until]: ./synch.md#waiting-for-the-condition -[nng_sleep_aio]: TODO.md +{{#include ../xref.md}} diff --git a/docs/ref/api/url.md b/docs/ref/api/url.md index 99460a08..6c104854 100644 --- a/docs/ref/api/url.md +++ b/docs/ref/api/url.md @@ -82,6 +82,4 @@ This is the only correct way to destroy an [`nng_url`] object. More information about Universal Resource Locators can be found in [RFC 3986](https://tools.ietf.org/html/rfc3986). -[`nng_url`]: #url-structure -[`nng_url_parse`]: #parse-a-url -[`nng_url_free`]: #destroy-a-url +{{#include ../xref.md}} diff --git a/docs/ref/xref.md b/docs/ref/xref.md new file mode 100644 index 00000000..787a3dee --- /dev/null +++ b/docs/ref/xref.md @@ -0,0 +1,115 @@ +<!-- Symbol cross reference --> + +[`nng_alloc`]: /api/memory.md#allocate-memory +[`nng_free`]: /api/memory.md#deallocate-memory +[`nng_strdup`]: /api/memory.md#duplicate-string +[`nng_strfree`]: /api/memory.md#free-string +[`nng_time`]: /api/time.md#time-type +[`nng_duration`]: /api/time.md#duration-type +[`nng_clock`]: /api/time.md#getting-the-current-time +[`nng_msleep`]: /api/time.md#waiting-for-duration +[`nng_msg`]: /api/msg.md#message-structure +[`nng_msg_alloc`]: /api/msg.md#create-a-message +[`nng_msg_free`]: /api/msg.md#destroy-a-message +[`nng_msg_body`]: /api/msg.md#message-body +[`nng_msg_len`]: /api/msg.md#message-body +[`nng_msg_clear`]: /api/msg.md#clear-the-body +[`nng_msg_capacity`]: /api/msg.md#message-size-and-capacity +[`nng_msg_realloc`]: /api/msg.md#message-size-and-capacity +[`nng_msg_reserve`]: /api/msg.md#message-size-and-capacity +[`nng_msg_append`]: /api/msg.md#add-to-body +[`nng_msg_insert`]: /api/msg.md#add-to-body +[`nng_msg_chop`]: /api/msg.md#consume-from-body +[`nng_msg_trim`]: /api/msg.md#consume-from-body +[`nng_msg_header`]: /api/msg.md#message-header +[`nng_msg_header_len`]: /api/msg.md#message-header +[`nng_msg_header_append`]: /api/msg.md#append-or-insert-header +[`nng_msg_header_insert`]: /api/msg.md#append-or-insert-header +[`nng_msg_header_clear`]: /api/msg.md#clear-the-header +[`nng_msg_pipe`]: /api/msg.md#message-pipe +[`nng_url`]: /api/url.md#url-structure +[`nng_url_parse`]: /api/url.md#parse-a-url +[`nng_url_free`]: /api/url.md#destroy-a-url +[`nng_socket_pair`]: /api/misc.md#create-socket-pair +[`nng_random`]: /api/misc.md#get-random-number +[`nng_version`]: /api/misc.md#report-library-version +[`nng_mtx`]: /api/synch.md#mutual-exclusion-lock +[`nng_mtx_alloc`]: /api/synch.md#creating-a-mutex +[`nng_mtx_free`]: /api/synch.md#destroying-a-mutex +[`nng_mtx_lock`]: /api/synch.md#acquiring-a-mutex +[`nng_mtx_unlock`]: /api/synch.md#releasing-a-mutex +[`nng_cv`]: /api/synch.md#condition-variable +[`nng_cv_alloc`]: /api/synch.md#creating-a-condition-variable +[`nng_cv_free`]: /api/synch.md#destroy-a-condition-variable +[`nng_cv_until`]: /api/synch.md#waiting-for-the-condition +[`nng_cv_wait`]: /api/synch.md#waiting-for-the-condition +[`nng_cv_wake`]: /api/synch.md#signaling-the-condition +[`nng_cv_wake1`]: /api/synch.md#signaling-the-condition +[`nng_stat_type`]: /api/stats.md#statistic-type +[`nng_stats_free`]: /api/stats.md#freeing-a-snapshot +[`nng_stat_value`]: /api/stats.md#statistic-value +[`nng_stat_bool`]: /api/stats.md#statistic-value +[`nng_stat_string`]: /api/stats.md#statistic-value +[`nng_stat_unit`]: /api/stats.md#statistic-units +[`nng_id_set`]: /api/id_map.md#store-a-value +[`nng_send`]: /TODO.md +[`nng_recv`]: /TODO.md +[`nng_aio`]: /TODO.md +[`nng_sleep_aio`]: /TODO.md + +<!-- Macros --> + +[`NNG_ENOMEM`]: /api/errors.md#NNG_ENOMEM +[`NNG_ETIMEDOUT`]: /api/errors.md#NNG_ETIMEDOUT +[`NNG_ENOSPC`]: /api/errors.md#NNG_ENOSPC +[`NNG_ENOTSUP`]: /api/errors.md#NNG_ENOTSUP +[`NNG_ENOENT`]: /api/errors.md#NNG_ENOENT +[`NNG_DURATION_INFINITE`]: /api/time.md#duration-type +[`NNG_DURATION_DEFAULT`]: /api/time.md#duration-type +[`NNG_DURATION_ZERO`]: /api/time.md#duration-type +[`NNG_MAJOR_VERSION`]: /api/misc.md#report-library-version +[`NNG_MINOR_VERSION`]: /api/misc.md#report-library-version +[`NNG_PATCH_VERSION`]: /api/misc.md#report-library-version +[`NNG_STAT_ID`]: /api/stats.md#NNG_STAT_ID +[`NNG_STAT_COUNTER`]: /api/stats.md#NNG_STAT_COUNTER +[`NNG_STAT_LEVEL`]: /api/stats.md#NNG_STAT_LEVEL +[`NNG_STAT_SCOPE`]: /api/stats.md#NNG_STAT_SCOPE +[`NNG_STAT_STRING`]: /api/stats.md#NNG_STAT_STRING +[`NNG_STAT_BOOLEAN`]: /api/stats.md#NNG_STAT_BOOLEAN + +<!-- Protocols --> + +[bus]: /proto/bus.md +[pair]: /proto/pair.md +[pub]: /proto/pub.md +[sub]: /proto/sub.md +[pull]: /proto/pull.md +[push]: /proto/push.md +[req]: /proto/req.md +[rep]: /proto/rep.md +[surveyor]: /proto/surveyor.md +[respondent]: /proto/respondent.md + +<!-- Transports --> + +[socktran]: /tran/socket.md +[ipc]: /tran/ipc.md +[inproc]: /tran/inproc.md +[tcp]: /tran/tcp.md +[udp]: /tran/udp.md + +<!-- Concept index --> + +[aio]: /TODO.md +[raw]: /TODO.md +[pipe]: /TODO.md +[socket]: /TODO.md +[dialer]: /TODO.md +[listener]: /TODO.md +[message-body]: /api/msg.md#message-body +[message-header]: /api/msg.md#message-header +[synchronization]: /api/synch.md +[mutex]: /api/synch.md#mutual-exclusion-lock +[condvar]: /api/synch.md#condition-variable +[thread]: /api/thread.md +[statistic]: /api/stats.md |
