# Miscellaneous

This chapter discusses some interfaces that don't really
fit anywhere else.

## Get Random Number

```c
uint32_t nng_random(void);
```

The {{i:`nng_random`}} returns a {{i:random number}}.
The value returned is suitable for use with cryptographic functions such as
key generation, and is obtained using platform-specific cryptographically strong random
number facilities when available.

## Create Socket Pair

```c
nng_err nng_socket_pair(int fds[2]);
```

The {{i:`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][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.[^socketpair]

[^socketpair]: At present only POSIX platforms implementing `socketpair` support this function.

This will return zero on success, or an error number. On platforms that lack this
capability, such as Windows, it will return `NNG_ENOTSUP`.

> [!TIP]
> This function may be useful for creating a shared connection between a parent process and
> a child process on UNIX platforms, without requiring the processes use a shared filesystem or TCP connection.

## Report Library Version

```c
const char * nng_version(void);
```

The {{i:`nng_version`}} function returns a human readable {{i:version number}}
for _NNG_, formatted as a `NUL`-terminated string.

Additionally, compile time version information is available
via some predefined macros:

- {{i:`NNG_MAJOR_VERSION`}}: Major version number.
- {{i:`NNG_MINOR_VERSION`}}: Minor version number.
- {{i:`NNG_PATCH_VERSION`}}: Patch version number.

_NNG_ is developed and released using
[Semantic Versioning 2.0](http://www.semver.org), and
the version numbers reported refer to both the API and the library itself.
(The {{i:ABI}} -- {{i:application binary interface}} -- between the
library and the application is controlled in a similar, but different
manner depending upon the link options and how the library is built.)

{{#include ../xref.md}}
