#define NNG_MAJOR_VERSION 2
#define NNG_MINOR_VERSION 0
#define NNG_PATCH_VERSION 0
#define NNG_MAXADDRLEN 128
#define NNG_DURATION_INFINITE -1
#define NNG_DURATION_DEFAULT -2
#define NNG_DURATION_ZERO 0
#define NNG_FLAG_NONBLOCK 2
#define NNG_MAP_RANDOM 1
struct nng_ctx_s {
    uint32_t id;
};
typedef struct nng_ctx_s nng_ctx;
struct nng_dialer_s {
    uint32_t id;
};
typedef struct nng_dialer_s nng_dialer;
struct nng_listener_s {
    uint32_t id;
};
typedef struct nng_listener_s nng_listener;
struct nng_pipe_s {
    uint32_t id;
};
typedef struct nng_pipe_s nng_pipe;
struct nng_socket_s {
    uint32_t id;
};
typedef struct nng_socket_s nng_socket;
typedef int32_t nng_duration;
typedef uint64_t nng_time;
typedef enum {
    NNG_OK = 0,
    NNG_EINTR = 1,
    NNG_ENOMEM = 2,
    NNG_EINVAL = 3,
    NNG_EBUSY = 4,
    NNG_ETIMEDOUT = 5,
    NNG_ECONNREFUSED = 6,
    NNG_ECLOSED = 7,
    NNG_EAGAIN = 8,
    NNG_ENOTSUP = 9,
    NNG_EADDRINUSE = 10,
    NNG_ESTATE = 11,
    NNG_ENOENT = 12,
    NNG_EPROTO = 13,
    NNG_EUNREACHABLE = 14,
    NNG_EADDRINVAL = 15,
    NNG_EPERM = 16,
    NNG_EMSGSIZE = 17,
    NNG_ECONNABORTED = 18,
    NNG_ECONNRESET = 19,
    NNG_ECANCELED = 20,
    NNG_ENOFILES = 21,
    NNG_ENOSPC = 22,
    NNG_EEXIST = 23,
    NNG_EREADONLY = 24,
    NNG_EWRITEONLY = 25,
    NNG_ECRYPTO = 26,
    NNG_EPEERAUTH = 27,
    NNG_EBADTYPE = 30,
    NNG_ECONNSHUT = 31,
    NNG_ESTOPPED = 999,
    NNG_EINTERNAL = 1000,
    NNG_ESYSERR = 268435456,
    NNG_ETRANERR = 536870912,
} nng_err;
typedef struct nng_msg nng_msg;
typedef struct nng_stat nng_stat;
typedef struct nng_aio nng_aio;
typedef struct nng_url nng_url;
typedef struct nng_tls_config nng_tls_config;
typedef struct nng_sockaddr_inproc {
    uint16_t sa_family;
    char sa_name[128];
} nng_sockaddr_inproc;
typedef struct nng_sockaddr_path {
    uint16_t sa_family;
    char sa_path[128];
} nng_sockaddr_path;
typedef struct nng_sockaddr_in6 {
    uint16_t sa_family;
    uint16_t sa_port;
    uint32_t sa_scope;
    uint8_t sa_addr[16];
} nng_sockaddr_in6;
typedef struct nng_sockaddr_in {
    uint16_t sa_family;
    uint16_t sa_port;
    uint32_t sa_addr;
} nng_sockaddr_in;
typedef struct nng_sockaddr_abstract {
    uint16_t sa_family;
    uint16_t sa_len;
    uint8_t sa_name[107];
} nng_sockaddr_abstract;
typedef struct nng_sockaddr_storage {
    uint16_t sa_family;
    uint64_t sa_pad[16];
} nng_sockaddr_storage;
typedef struct nng_sockaddr_path nng_sockaddr_ipc;
typedef union nng_sockaddr {
    uint16_t s_family;
    nng_sockaddr_ipc s_ipc;
    struct nng_sockaddr_inproc s_inproc;
    struct nng_sockaddr_in6 s_in6;
    struct nng_sockaddr_in s_in;
    struct nng_sockaddr_abstract s_abstract;
    struct nng_sockaddr_storage s_storage;
} nng_sockaddr;
enum nng_sockaddr_family {
    NNG_AF_UNSPEC = 0,
    NNG_AF_INPROC = 1,
    NNG_AF_IPC = 2,
    NNG_AF_INET = 3,
    NNG_AF_INET6 = 4,
    NNG_AF_ABSTRACT = 5,
};
typedef struct nng_iov {
    void * iov_buf;
    size_t iov_len;
} nng_iov;
int nng_socket_close(nng_socket);
int nng_socket_id(nng_socket);
int nng_socket_set_bool(nng_socket, const char *, _Bool);
int nng_socket_set_int(nng_socket, const char *, int);
int nng_socket_set_size(nng_socket, const char *, size_t);
int nng_socket_set_ms(nng_socket, const char *, nng_duration);
int nng_socket_get_bool(nng_socket, const char *, _Bool *);
int nng_socket_get_int(nng_socket, const char *, int *);
int nng_socket_get_size(nng_socket, const char *, size_t *);
int nng_socket_get_ms(nng_socket, const char *, nng_duration *);
int nng_socket_get_recv_poll_fd(nng_socket id, int * fdp);
int nng_socket_get_send_poll_fd(nng_socket id, int * fdp);
int nng_socket_proto_id(nng_socket id, uint16_t * idp);
int nng_socket_peer_id(nng_socket id, uint16_t * idp);
int nng_socket_proto_name(nng_socket id, const char ** namep);
int nng_socket_peer_name(nng_socket id, const char ** namep);
int nng_socket_raw(nng_socket id, _Bool * rawp);
const char * nng_str_sockaddr(const union nng_sockaddr * sa, char * buf, size_t bufsz);
uint32_t nng_sockaddr_port(const union nng_sockaddr * sa);
_Bool nng_sockaddr_equal(const union nng_sockaddr * sa1, const union nng_sockaddr * sa2);
uint64_t nng_sockaddr_hash(const union nng_sockaddr * sa);
typedef enum {
    NNG_PIPE_EV_NONE = 0,
    NNG_PIPE_EV_ADD_PRE = 1,
    NNG_PIPE_EV_ADD_POST = 2,
    NNG_PIPE_EV_REM_POST = 3,
    NNG_PIPE_EV_NUM = 4,
} nng_pipe_ev;
typedef void (*nng_pipe_cb)(nng_pipe, nng_pipe_ev, void *);
nng_err nng_pipe_notify(nng_socket, nng_pipe_ev, nng_pipe_cb, void *);
int nng_listen(nng_socket, const char *, nng_listener *, int);
int nng_listen_url(nng_socket, const struct nng_url *, nng_listener *, int);
int nng_dial(nng_socket, const char *, nng_dialer *, int);
int nng_dial_url(nng_socket, const struct nng_url * url, nng_dialer *, int);
int nng_dialer_create(nng_dialer *, nng_socket, const char *);
int nng_dialer_create_url(nng_dialer *, nng_socket, const struct nng_url *);
int nng_listener_create(nng_listener *, nng_socket, const char *);
int nng_listener_create_url(nng_listener *, nng_socket, const struct nng_url *);
int nng_dialer_start(nng_dialer, int);
int nng_dialer_bind(nng_dialer, const union nng_sockaddr *);
void nng_dialer_start_aio(nng_dialer, int, struct nng_aio *);
int nng_listener_start(nng_listener, int);
int nng_dialer_close(nng_dialer);
int nng_listener_close(nng_listener);
int nng_dialer_id(nng_dialer);
int nng_listener_id(nng_listener);
int nng_dialer_set_bool(nng_dialer, const char *, _Bool);
int nng_dialer_set_int(nng_dialer, const char *, int);
int nng_dialer_set_size(nng_dialer, const char *, size_t);
int nng_dialer_set_string(nng_dialer, const char *, const char *);
int nng_dialer_set_ms(nng_dialer, const char *, nng_duration);
int nng_dialer_set_tls(nng_dialer, struct nng_tls_config *);
int nng_dialer_get_bool(nng_dialer, const char *, _Bool *);
int nng_dialer_get_int(nng_dialer, const char *, int *);
int nng_dialer_get_size(nng_dialer, const char *, size_t *);
int nng_dialer_get_string(nng_dialer, const char *, const char **);
int nng_dialer_get_ms(nng_dialer, const char *, nng_duration *);
int nng_dialer_get_tls(nng_dialer, struct nng_tls_config **);
int nng_dialer_get_url(nng_dialer id, const struct nng_url ** urlp);
int nng_listener_set_bool(nng_listener, const char *, _Bool);
int nng_listener_set_int(nng_listener, const char *, int);
int nng_listener_set_size(nng_listener, const char *, size_t);
int nng_listener_set_string(nng_listener, const char *, const char *);
int nng_listener_set_ms(nng_listener, const char *, nng_duration);
int nng_listener_set_tls(nng_listener, struct nng_tls_config *);
int nng_listener_set_security_descriptor(nng_listener, void *);
int nng_listener_get_url(nng_listener id, const struct nng_url ** urlp);
int nng_listener_get_bool(nng_listener, const char *, _Bool *);
int nng_listener_get_int(nng_listener, const char *, int *);
int nng_listener_get_size(nng_listener, const char *, size_t *);
int nng_listener_get_string(nng_listener, const char *, const char **);
int nng_listener_get_ms(nng_listener, const char *, nng_duration *);
int nng_listener_get_tls(nng_listener, struct nng_tls_config **);
const char * nng_strerror(nng_err);
int nng_send(nng_socket, const void *, size_t, int);
int nng_recv(nng_socket, void *, size_t *, int);
int nng_sendmsg(nng_socket, struct nng_msg *, int);
int nng_recvmsg(nng_socket, struct nng_msg **, int);
void nng_socket_send(nng_socket, struct nng_aio *);
void nng_socket_recv(nng_socket, struct nng_aio *);
int nng_ctx_open(nng_ctx *, nng_socket);
int nng_ctx_close(nng_ctx);
int nng_ctx_id(nng_ctx);
void nng_ctx_recv(nng_ctx, struct nng_aio *);
int nng_ctx_recvmsg(nng_ctx, struct nng_msg **, int);
void nng_ctx_send(nng_ctx, struct nng_aio *);
int nng_ctx_sendmsg(nng_ctx, struct nng_msg *, int);
int nng_ctx_get_bool(nng_ctx, const char *, _Bool *);
int nng_ctx_get_int(nng_ctx, const char *, int *);
int nng_ctx_get_size(nng_ctx, const char *, size_t *);
int nng_ctx_get_ms(nng_ctx, const char *, nng_duration *);
int nng_ctx_set_bool(nng_ctx, const char *, _Bool);
int nng_ctx_set_int(nng_ctx, const char *, int);
int nng_ctx_set_size(nng_ctx, const char *, size_t);
int nng_ctx_set_ms(nng_ctx, const char *, nng_duration);
void * nng_alloc(size_t);
void nng_free(void *, size_t);
char * nng_strdup(const char *);
void nng_strfree(char *);
nng_err nng_aio_alloc(struct nng_aio **, void(*)(void *), void *);
void nng_aio_free(struct nng_aio *);
void nng_aio_reap(struct nng_aio *);
void nng_aio_stop(struct nng_aio *);
nng_err nng_aio_result(struct nng_aio *);
size_t nng_aio_count(struct nng_aio *);
void nng_aio_cancel(struct nng_aio *);
void nng_aio_abort(struct nng_aio *, nng_err);
void nng_aio_wait(struct nng_aio *);
_Bool nng_aio_busy(struct nng_aio *);
void nng_aio_set_msg(struct nng_aio *, struct nng_msg *);
struct nng_msg * nng_aio_get_msg(struct nng_aio *);
nng_err nng_aio_set_input(struct nng_aio *, unsigned int, void *);
void * nng_aio_get_input(struct nng_aio *, unsigned int);
nng_err nng_aio_set_output(struct nng_aio *, unsigned int, void *);
void * nng_aio_get_output(struct nng_aio *, unsigned int);
void nng_aio_set_timeout(struct nng_aio *, nng_duration);
void nng_aio_set_expire(struct nng_aio *, nng_time);
nng_err nng_aio_set_iov(struct nng_aio *, unsigned int, const struct nng_iov *);
void nng_aio_reset(struct nng_aio *);
void nng_aio_finish(struct nng_aio *, nng_err);
typedef void (*nng_aio_cancelfn)(struct nng_aio *, void *, nng_err);
_Bool nng_aio_start(struct nng_aio *, nng_aio_cancelfn, void *);
void nng_aio_skip_callback(struct nng_aio *, _Bool *);
void nng_sleep_aio(nng_duration, struct nng_aio *);
int nng_msg_alloc(struct nng_msg **, size_t);
void nng_msg_free(struct nng_msg *);
int nng_msg_realloc(struct nng_msg *, size_t);
int nng_msg_reserve(struct nng_msg *, size_t);
size_t nng_msg_capacity(struct nng_msg *);
void * nng_msg_header(struct nng_msg *);
size_t nng_msg_header_len(const struct nng_msg *);
void * nng_msg_body(struct nng_msg *);
size_t nng_msg_len(const struct nng_msg *);
int nng_msg_append(struct nng_msg *, const void *, size_t);
int nng_msg_insert(struct nng_msg *, const void *, size_t);
int nng_msg_trim(struct nng_msg *, size_t);
int nng_msg_chop(struct nng_msg *, size_t);
int nng_msg_header_append(struct nng_msg *, const void *, size_t);
int nng_msg_header_insert(struct nng_msg *, const void *, size_t);
int nng_msg_header_trim(struct nng_msg *, size_t);
int nng_msg_header_chop(struct nng_msg *, size_t);
int nng_msg_header_append_u16(struct nng_msg *, uint16_t);
int nng_msg_header_append_u32(struct nng_msg *, uint32_t);
int nng_msg_header_append_u64(struct nng_msg *, uint64_t);
int nng_msg_header_insert_u16(struct nng_msg *, uint16_t);
int nng_msg_header_insert_u32(struct nng_msg *, uint32_t);
int nng_msg_header_insert_u64(struct nng_msg *, uint64_t);
int nng_msg_header_chop_u16(struct nng_msg *, uint16_t *);
int nng_msg_header_chop_u32(struct nng_msg *, uint32_t *);
int nng_msg_header_chop_u64(struct nng_msg *, uint64_t *);
int nng_msg_header_trim_u16(struct nng_msg *, uint16_t *);
int nng_msg_header_trim_u32(struct nng_msg *, uint32_t *);
int nng_msg_header_trim_u64(struct nng_msg *, uint64_t *);
int nng_msg_append_u16(struct nng_msg *, uint16_t);
int nng_msg_append_u32(struct nng_msg *, uint32_t);
int nng_msg_append_u64(struct nng_msg *, uint64_t);
int nng_msg_insert_u16(struct nng_msg *, uint16_t);
int nng_msg_insert_u32(struct nng_msg *, uint32_t);
int nng_msg_insert_u64(struct nng_msg *, uint64_t);
int nng_msg_chop_u16(struct nng_msg *, uint16_t *);
int nng_msg_chop_u32(struct nng_msg *, uint32_t *);
int nng_msg_chop_u64(struct nng_msg *, uint64_t *);
int nng_msg_trim_u16(struct nng_msg *, uint16_t *);
int nng_msg_trim_u32(struct nng_msg *, uint32_t *);
int nng_msg_trim_u64(struct nng_msg *, uint64_t *);
int nng_msg_dup(struct nng_msg **, const struct nng_msg *);
void nng_msg_clear(struct nng_msg *);
void nng_msg_header_clear(struct nng_msg *);
void nng_msg_set_pipe(struct nng_msg *, nng_pipe);
nng_pipe nng_msg_get_pipe(const struct nng_msg *);
nng_err nng_pipe_get_bool(nng_pipe, const char *, _Bool *);
nng_err nng_pipe_get_int(nng_pipe, const char *, int *);
nng_err nng_pipe_get_ms(nng_pipe, const char *, nng_duration *);
nng_err nng_pipe_get_size(nng_pipe, const char *, size_t *);
nng_err nng_pipe_get_string(nng_pipe, const char *, const char **);
nng_err nng_pipe_get_strdup(nng_pipe, const char *, char **);
nng_err nng_pipe_get_strcpy(nng_pipe, const char *, char *, size_t);
nng_err nng_pipe_get_strlen(nng_pipe, const char *, size_t *);
nng_err nng_pipe_get_scheme(nng_pipe, const char **);
nng_err nng_pipe_peer_addr(nng_pipe, union nng_sockaddr *);
nng_err nng_pipe_self_addr(nng_pipe, union nng_sockaddr *);
nng_err nng_pipe_close(nng_pipe);
int nng_pipe_id(nng_pipe);
nng_socket nng_pipe_socket(nng_pipe);
nng_dialer nng_pipe_dialer(nng_pipe);
nng_listener nng_pipe_listener(nng_pipe);
int nng_stats_get(struct nng_stat **);
void nng_stats_free(struct nng_stat *);
void nng_stats_dump(const struct nng_stat *);
const struct nng_stat * nng_stat_next(const struct nng_stat *);
const struct nng_stat * nng_stat_child(const struct nng_stat *);
const char * nng_stat_name(const struct nng_stat *);
int nng_stat_type(const struct nng_stat *);
const struct nng_stat * nng_stat_find(const struct nng_stat *, const char *);
const struct nng_stat * nng_stat_find_socket(const struct nng_stat *, nng_socket);
const struct nng_stat * nng_stat_find_dialer(const struct nng_stat *, nng_dialer);
const struct nng_stat * nng_stat_find_listener(const struct nng_stat *, nng_listener);
enum nng_stat_type_enum {
    NNG_STAT_SCOPE = 0,
    NNG_STAT_LEVEL = 1,
    NNG_STAT_COUNTER = 2,
    NNG_STAT_STRING = 3,
    NNG_STAT_BOOLEAN = 4,
    NNG_STAT_ID = 5,
};
int nng_stat_unit(const struct nng_stat *);
enum nng_unit_enum {
    NNG_UNIT_NONE = 0,
    NNG_UNIT_BYTES = 1,
    NNG_UNIT_MESSAGES = 2,
    NNG_UNIT_MILLIS = 3,
    NNG_UNIT_EVENTS = 4,
};
uint64_t nng_stat_value(const struct nng_stat *);
_Bool nng_stat_bool(const struct nng_stat *);
const char * nng_stat_string(const struct nng_stat *);
const char * nng_stat_desc(const struct nng_stat *);
uint64_t nng_stat_timestamp(const struct nng_stat *);
nng_err nng_device(nng_socket, nng_socket);
void nng_device_aio(struct nng_aio *, nng_socket, nng_socket);
nng_err nng_url_parse(struct nng_url **, const char *);
void nng_url_free(struct nng_url *);
nng_err nng_url_clone(struct nng_url **, const struct nng_url *);
int nng_url_sprintf(char *, size_t, const struct nng_url *);
const char * nng_url_scheme(const struct nng_url *);
uint32_t nng_url_port(const struct nng_url *);
void nng_url_resolve_port(struct nng_url * url, uint32_t port);
const char * nng_url_hostname(const struct nng_url *);
const char * nng_url_userinfo(const struct nng_url *);
const char * nng_url_path(const struct nng_url *);
const char * nng_url_query(const struct nng_url *);
const char * nng_url_fragment(const struct nng_url *);
const char * nng_version(void);
typedef struct nng_stream nng_stream;
typedef struct nng_stream_dialer nng_stream_dialer;
typedef struct nng_stream_listener nng_stream_listener;
void nng_stream_free(struct nng_stream *);
void nng_stream_close(struct nng_stream *);
void nng_stream_stop(struct nng_stream *);
void nng_stream_send(struct nng_stream *, struct nng_aio *);
void nng_stream_recv(struct nng_stream *, struct nng_aio *);
nng_err nng_stream_get_bool(struct nng_stream *, const char *, _Bool *);
nng_err nng_stream_get_int(struct nng_stream *, const char *, int *);
nng_err nng_stream_get_ms(struct nng_stream *, const char *, nng_duration *);
nng_err nng_stream_get_size(struct nng_stream *, const char *, size_t *);
nng_err nng_stream_get_string(struct nng_stream *, const char *, const char **);
const union nng_sockaddr * nng_stream_peer_addr(struct nng_stream *);
const union nng_sockaddr * nng_stream_self_addr(struct nng_stream *);
nng_err nng_stream_dialer_alloc(struct nng_stream_dialer **, const char *);
nng_err nng_stream_dialer_alloc_url(struct nng_stream_dialer **, const struct nng_url *);
void nng_stream_dialer_free(struct nng_stream_dialer *);
void nng_stream_dialer_close(struct nng_stream_dialer *);
void nng_stream_dialer_stop(struct nng_stream_dialer *);
void nng_stream_dialer_dial(struct nng_stream_dialer *, struct nng_aio *);
nng_err nng_stream_dialer_bind(struct nng_stream_dialer *, const union nng_sockaddr *);
nng_err nng_stream_dialer_get_bool(struct nng_stream_dialer *, const char *, _Bool *);
nng_err nng_stream_dialer_get_int(struct nng_stream_dialer *, const char *, int *);
nng_err nng_stream_dialer_get_ms(struct nng_stream_dialer *, const char *, nng_duration *);
nng_err nng_stream_dialer_get_size(struct nng_stream_dialer *, const char *, size_t *);
nng_err nng_stream_dialer_get_string(struct nng_stream_dialer *, const char *, const char **);
nng_err nng_stream_dialer_set_bool(struct nng_stream_dialer *, const char *, _Bool);
nng_err nng_stream_dialer_set_int(struct nng_stream_dialer *, const char *, int);
nng_err nng_stream_dialer_set_ms(struct nng_stream_dialer *, const char *, nng_duration);
nng_err nng_stream_dialer_set_size(struct nng_stream_dialer *, const char *, size_t);
nng_err nng_stream_dialer_set_string(struct nng_stream_dialer *, const char *, const char *);
nng_err nng_stream_dialer_get_tls(struct nng_stream_dialer *, struct nng_tls_config **);
nng_err nng_stream_dialer_set_tls(struct nng_stream_dialer *, struct nng_tls_config *);
nng_err nng_stream_listener_alloc(struct nng_stream_listener **, const char *);
nng_err nng_stream_listener_alloc_url(struct nng_stream_listener **, const struct nng_url *);
void nng_stream_listener_free(struct nng_stream_listener *);
void nng_stream_listener_close(struct nng_stream_listener *);
void nng_stream_listener_stop(struct nng_stream_listener *);
nng_err nng_stream_listener_listen(struct nng_stream_listener *);
void nng_stream_listener_accept(struct nng_stream_listener *, struct nng_aio *);
nng_err nng_stream_listener_get_bool(struct nng_stream_listener *, const char *, _Bool *);
nng_err nng_stream_listener_get_int(struct nng_stream_listener *, const char *, int *);
nng_err nng_stream_listener_get_ms(struct nng_stream_listener *, const char *, nng_duration *);
nng_err nng_stream_listener_get_size(struct nng_stream_listener *, const char *, size_t *);
nng_err nng_stream_listener_get_string(struct nng_stream_listener *, const char *, const char **);
nng_err nng_stream_listener_set_bool(struct nng_stream_listener *, const char *, _Bool);
nng_err nng_stream_listener_set_int(struct nng_stream_listener *, const char *, int);
nng_err nng_stream_listener_set_ms(struct nng_stream_listener *, const char *, nng_duration);
nng_err nng_stream_listener_set_size(struct nng_stream_listener *, const char *, size_t);
nng_err nng_stream_listener_set_string(struct nng_stream_listener *, const char *, const char *);
nng_err nng_stream_listener_get_tls(struct nng_stream_listener *, struct nng_tls_config **);
nng_err nng_stream_listener_set_tls(struct nng_stream_listener *, struct nng_tls_config *);
nng_err nng_stream_listener_set_security_descriptor(struct nng_stream_listener *, void *);
typedef struct nng_udp nng_udp;
int nng_udp_open(struct nng_udp ** udpp, union nng_sockaddr * sa);
void nng_udp_stop(struct nng_udp * udp);
void nng_udp_close(struct nng_udp * udp);
int nng_udp_sockname(struct nng_udp * udp, union nng_sockaddr * sa);
void nng_udp_send(struct nng_udp * udp, struct nng_aio * aio);
void nng_udp_recv(struct nng_udp * udp, struct nng_aio * aio);
int nng_udp_multicast_membership(struct nng_udp * udp, union nng_sockaddr * sa, _Bool join);
typedef struct nng_init_params {
    int16_t num_task_threads;
    int16_t max_task_threads;
    int16_t num_expire_threads;
    int16_t max_expire_threads;
    int16_t num_poller_threads;
    int16_t max_poller_threads;
    int16_t num_resolver_threads;
    void * (**malloc_fn)(size_t);
    void * (**calloc_fn)(size_t, size_t);
    void (**free_fn)(void *, size_t);
} nng_init_params;
nng_err nng_init(void * params);
void nng_fini(void);
enum nng_log_level {
    NNG_LOG_NONE = 0,
    NNG_LOG_ERR = 3,
    NNG_LOG_WARN = 4,
    NNG_LOG_NOTICE = 5,
    NNG_LOG_INFO = 6,
    NNG_LOG_DEBUG = 7,
};
enum nng_log_facility {
    NNG_LOG_USER = 1,
    NNG_LOG_DAEMON = 3,
    NNG_LOG_AUTH = 10,
    NNG_LOG_LOCAL0 = 16,
    NNG_LOG_LOCAL1 = 17,
    NNG_LOG_LOCAL2 = 18,
    NNG_LOG_LOCAL3 = 19,
    NNG_LOG_LOCAL4 = 20,
    NNG_LOG_LOCAL5 = 21,
    NNG_LOG_LOCAL6 = 22,
    NNG_LOG_LOCAL7 = 23,
};
typedef void (*nng_logger)(enum nng_log_level level, enum nng_log_facility facility, const char * msgid, const char * msg);
void nng_null_logger(enum nng_log_level, enum nng_log_facility, const char *, const char *);
void nng_stderr_logger(enum nng_log_level, enum nng_log_facility, const char *, const char *);
void nng_system_logger(enum nng_log_level, enum nng_log_facility, const char *, const char *);
void nng_log_set_facility(enum nng_log_facility facility);
void nng_log_set_level(enum nng_log_level level);
enum nng_log_level nng_log_get_level(void);
void nng_log_set_logger(nng_logger logger);
void nng_log_err(const char * msgid, const char * msg, ...);
void nng_log_warn(const char * msgid, const char * msg, ...);
void nng_log_notice(const char * msgid, const char * msg, ...);
void nng_log_info(const char * msgid, const char * msg, ...);
void nng_log_debug(const char * msgid, const char * msg, ...);
void nng_log_auth(enum nng_log_level level, const char * msgid, const char * msg, ...);
nng_time nng_clock(void);
void nng_msleep(nng_duration);
uint32_t nng_random(void);
nng_err nng_socket_pair(int[2]);
typedef struct nng_thread nng_thread;
int nng_thread_create(struct nng_thread **, void(*)(void *), void *);
void nng_thread_set_name(struct nng_thread *, const char *);
void nng_thread_destroy(struct nng_thread *);
typedef struct nng_mtx nng_mtx;
int nng_mtx_alloc(struct nng_mtx **);
void nng_mtx_free(struct nng_mtx *);
void nng_mtx_lock(struct nng_mtx *);
void nng_mtx_unlock(struct nng_mtx *);
typedef struct nng_cv nng_cv;
int nng_cv_alloc(struct nng_cv **, struct nng_mtx *);
void nng_cv_free(struct nng_cv *);
void nng_cv_wait(struct nng_cv *);
int nng_cv_until(struct nng_cv *, nng_time);
void nng_cv_wake(struct nng_cv *);
void nng_cv_wake1(struct nng_cv *);
enum nng_tls_mode {
    NNG_TLS_MODE_CLIENT = 0,
    NNG_TLS_MODE_SERVER = 1,
};
enum nng_tls_auth_mode {
    NNG_TLS_AUTH_MODE_NONE = 0,
    NNG_TLS_AUTH_MODE_OPTIONAL = 1,
    NNG_TLS_AUTH_MODE_REQUIRED = 2,
};
enum nng_tls_version {
    NNG_TLS_1_2 = 771,
    NNG_TLS_1_3 = 772,
};
int nng_tls_config_alloc(struct nng_tls_config **, enum nng_tls_mode);
void nng_tls_config_hold(struct nng_tls_config *);
void nng_tls_config_free(struct nng_tls_config *);
int nng_tls_config_server_name(struct nng_tls_config *, const char *);
int nng_tls_config_ca_chain(struct nng_tls_config *, const char *, const char *);
int nng_tls_config_own_cert(struct nng_tls_config *, const char *, const char *, const char *);
int nng_tls_config_auth_mode(struct nng_tls_config *, enum nng_tls_auth_mode);
int nng_tls_config_ca_file(struct nng_tls_config *, const char *);
int nng_tls_config_cert_key_file(struct nng_tls_config *, const char *, const char *);
int nng_tls_config_psk(struct nng_tls_config *, const char *, const uint8_t *, size_t);
int nng_tls_config_version(struct nng_tls_config *, enum nng_tls_version, enum nng_tls_version);
const char * nng_tls_engine_name(void);
const char * nng_tls_engine_description(void);
_Bool nng_tls_engine_fips_mode(void);
int nng_bus0_open(nng_socket *);
int nng_bus0_open_raw(nng_socket *);
int nng_pair0_open(nng_socket *);
int nng_pair0_open_raw(nng_socket *);
int nng_pair1_open(nng_socket *);
int nng_pair1_open_raw(nng_socket *);
int nng_pair1_open_poly(nng_socket *);
int nng_pull0_open(nng_socket *);
int nng_pull0_open_raw(nng_socket *);
int nng_push0_open(nng_socket *);
int nng_push0_open_raw(nng_socket *);
int nng_pub0_open(nng_socket *);
int nng_pub0_open_raw(nng_socket *);
int nng_sub0_open(nng_socket *);
int nng_sub0_open_raw(nng_socket *);
int nng_sub0_socket_subscribe(nng_socket id, const void * buf, size_t sz);
int nng_sub0_socket_unsubscribe(nng_socket id, const void * buf, size_t sz);
int nng_sub0_ctx_subscribe(nng_ctx id, const void * buf, size_t sz);
int nng_sub0_ctx_unsubscribe(nng_ctx id, const void * buf, size_t sz);
int nng_rep0_open(nng_socket *);
int nng_rep0_open_raw(nng_socket *);
int nng_req0_open(nng_socket *);
int nng_req0_open_raw(nng_socket *);
int nng_respondent0_open(nng_socket *);
int nng_respondent0_open_raw(nng_socket *);
int nng_surveyor0_open(nng_socket *);
int nng_surveyor0_open_raw(nng_socket *);
#define NNG_MAJOR_VERSION ...
#define NNG_MINOR_VERSION ...
#define NNG_PATCH_VERSION ...
#define NNG_MAXADDRLEN ...
#define NNG_FLAG_NONBLOCK ...