---
name: "nng_ctx_open"
section: "3"
platform: "linux"
package: "libnng-dev"
version: "1.10.1-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/nng_ctx_open"
---

# nng\_ctx\_open(3)

create context

## 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*.

**Note**\

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.

**Note**\

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_close/3.md), [nng\_ctx\_getopt(3)](/nng_ctx_getopt/3.md), [nng\_ctx\_recv(3)](/nng_ctx_recv/3.md), [nng\_ctx\_send(3)](/nng_ctx_send/3.md), [nng\_ctx\_setopt(3)](/nng_ctx_setopt/3.md), [nng\_strerror(3)](/nng_strerror/3.md), [nng\_ctx(5)](/nng_ctx/5.md), [nng\_socket(5)](/nng_socket/5.md), [nng\_rep(7)](/nng_rep/7.md), [nng\_req(7)](/nng_req/7.md), [nng(7)](/nng/7.md)
