= nng_recv(3) // // Copyright 2018 Staysail Systems, Inc. // Copyright 2018 Capitar IT Group BV // // 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_recv - recv data == SYNOPSIS [source, c] ----------- #include int nng_recv(nng_socket s, void *data, size_t *sizep int flags); ----------- == DESCRIPTION The `nng_recv()` receives a message. If the special flag `NNG_FLAG_ALLOC` is not specified, then the caller must set _data_ to a buffer to receive the message body content, and must store the size of that buffer at the location pointed to by _sizep_. When the function returns, if it is successful, the size at _sizep_ will be updated with the actual message body length copied into _data_. If the special flag `NNG_FLAG_ALLOC` is present, then a "zero-copy" mode is used. In this case the caller must set the value of _data_ to the location of another pointer (of type `void *`), and the _sizep_ pointer must be set to a location to receive the size of the message body. The function will then allocate a message buffer (as if by <>), fill it with the message body, and store it at the address referenced by _data_, and update the size referenced by _sizep_. When this flag is present, the caller assumes responsibility for disposing of the received buffer either by the function <> or reusing the message for sending (with the same size) via <>. NOTE: The semantics of what receiving a message means vary from protocol to protocol, so examination of the protocol documentation is encouraged. (For example, with an <> socket a message may only be received after a request has been sent, and an <> socket may only receive messages corresponding to topics to which it has subscribed.) Furthermore, some protocols may not support receiving data at all, such as <>. TIP: The `NNG_FLAG_ALLOC` flag can be used to reduce data copies, thereby increasing performance, particularly if the buffer is reused to send a response using the same flag. == RETURN VALUES This function returns 0 on success, and non-zero otherwise. == ERRORS `NNG_EAGAIN`:: The socket _s_ cannot accept data for sending. `NNG_ECLOSED`:: The socket _s_ is not open. `NNG_EINVAL`:: An invalid set of _flags_ was specified. `NNG_EMSGSIZE`:: The received message did not fit in the size provided. `NNG_ENOMEM`:: Insufficient memory is available. `NNG_ENOTSUP`:: The protocol for socket _s_ does not support receiving. `NNG_ESTATE`:: The socket _s_ cannot receive data in this state. == SEE ALSO <>, <>, <>, <>, <>, <>