# nng_ctx_open(3) Manual Page

## NAME

nng_ctx_open - create context

## SYNOPSIS

    #include <nng/nng.h>

    int nng_ctx_open(nng_ctx *ctxp, nng_socket s);

## DESCRIPTION

The `nng_ctx_open()` function creates a separate context to be used with the socket s, and returns it at the location pointed by ctxp.

| Not every protocol supports creation of separate contexts.

Contexts allow the independent and concurrent use of stateful operations using the same socket. For example, two different contexts created on a rep socket can each receive requests, and send replies to them, without any regard to or interference with each other.

TIP: Using contexts is an excellent way to write simpler concurrent applications, while retaining the benefits of the protocol-specific advanced processing, avoiding the need to bypass that with raw mode sockets.

| Use of contexts with raw mode sockets is nonsensical, and not supported.

## RETURN VALUES

This function returns 0 on success, and non-zero otherwise.

## ERRORS

`NNG_ENOMEM` | Insufficient memory is available.
`NNG_ENOTSUP` | The protocol does not support separate contexts, or the socket was opened in raw mode.

## SEE ALSO

nng_ctx_close(3), nng_ctx_getopt(3), nng_ctx_recv(3), nng_ctx_send(3), nng_ctx_setopt(3), nng_strerror(3), nng_ctx(5), nng_socket(5), nng_rep(7), nng_req(7), nng(7)