= nng_msg_insert(3)
//
// Copyright 2020 Staysail Systems, Inc. <info@staysail.tech>
// Copyright 2018 Capitar IT Group BV <info@capitar.com>
//
// This document is supplied under the terms of the MIT License, a
// copy of which should be located in the distribution where this
// file was obtained (LICENSE.txt).  A copy of the license may also be
// found online at https://opensource.org/licenses/MIT.
//

== NAME

nng_msg_insert - prepend to message body

== SYNOPSIS

[source, c]
----
#include <nng/nng.h>

int nng_msg_insert(nng_msg *msg, const void *val, size_t size);
int nng_msg_insert_u16(nng_msg *msg, uint16_t val16);
int nng_msg_insert_u32(nng_msg *msg, uint32_t val32);
int nng_msg_insert_u64(nng_msg *msg, uint64_t val64);
----

== DESCRIPTION

The `nng_msg_insert()` family of functions prepends data to
the front of the body of message _msg_, reallocating it if necessary.
The first function prepends _size_ bytes, copying them from _val_.
The remaining functions prepend the specified value (such as _val32_)
in network-byte order (big-endian).

TIP: These functions make use of space pre-allocated in front of the
message body if available, so they can often avoid performing any reallocation.
Applications should use these instead of reallocating and copying message
content themselves, in order to benefit from this capability.

== RETURN VALUES

These functions return 0 on success, and non-zero otherwise.

== ERRORS

[horizontal]
`NNG_ENOMEM`:: Insufficient free memory exists.

== SEE ALSO

[.text-left]
xref:nng_msg_alloc.3.adoc[nng_msg_alloc(3)],
xref:nng_msg_append.3.adoc[nng_msg_append(3)],
xref:nng_msg_body.3.adoc[nng_msg_body(3)],
xref:nng_msg_chop.3.adoc[nng_msg_chop(3)],
xref:nng_msg_free.3.adoc[nng_msg_free(3)],
xref:nng_msg_len.3.adoc[nng_msg_len(3)],
xref:nng_msg_realloc.3.adoc[nng_msg_realloc(3)],
xref:nng_msg_trim.3.adoc[nng_msg_trim(3)],
xref:nng_strerror.3.adoc[nng_strerror(3)],
xref:nng_msg.5.adoc[nng_msg(5)],
xref:nng.7.adoc[nng(7)]
