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

# nng\_setopt(3)

set socket option

## NAME

nng\_setopt - set socket option

## SYNOPSIS

```
#include <nng/nng.h>
int nng_setopt(nng_socket s, const char *opt, const void *val, size_t valsz);
int nng_setopt_bool(nng_socket s, const char *opt, bool bval);
int nng_setopt_int(nng_socket s, const char *opt, int ival);
int nng_setopt_ms(nng_socket s, const char *opt, nng_duration dur);
int nng_setopt_ptr(nng_socket s, const char *opt, void *ptr);
int nng_setopt_size(nng_socket s, const char *opt, size_t z);
int nng_setopt_string(nng_socket s, const char *opt, const char *str);
int nng_setopt_uint64(nng_socket s, const char *opt, uint64_t u64);
```

## DESCRIPTION

**Important**\

These functions are deprecated.  Please see nng\_socket\_set. They may not be present if the library was built with `NNG_ELIDE_DEPRECATED`.

The `nng_setopt()` functions are used to configure options for the socket *s*. The actual options that may be configured in this way vary, and are specified by *opt*. A number of them are documented in [nng\_options(5)](/nng_options/5.md).

Additionally some transport-specific and protocol-specific options are documented with the transports and protocols themselves.

### Forms

The details of the type, size, and semantics of the option will depend on the actual option, and will be documented with the option itself.

`nng_setopt()`

This function is untyped, and can be used to configure any arbitrary data. The *val* pointer addresses the data to copy, and *valsz* is the size of the objected located at *val*.

**Tip**\

It may be easier to use one of the typed forms of this function.

`nng_setopt_bool()`

This function is for options which take a Boolean (`bool`). The *bval* is passed to the option.

`nng_setopt_int()`

This function is for options which take an integer (`int`). The *ival* is passed to the option.

`nng_setopt_ms()`

This function is used to configure time durations (such as timeouts) using type `nng_duration`. The duration *dur* is an integer number of milliseconds.

`nng_setopt_ptr()`

This function is used to pass a pointer, *ptr*, to structured data. The data referenced by *ptr* is generally managed by other functions. For example, TLS configuration objects created with (`nng_tls_config_alloc()`) can be passed this way.

**Note**\

This form is somewhat special in that the object is generally not copied, but instead the **pointer** to the object is copied.

`nng_setopt_size()`

This function is used to configure a size, *z*, typically for buffer sizes, message maximum sizes, and similar options.

`nng_setopt_string()`

This function is used to pass configure a string, *str*. Strings passed this way must be legal UTF-8 or ASCII strings, terminated with a `NUL` (`\0`) byte. (Other constraints may apply as well, see the documentation for each option for details.)

`nng_setopt_uint64()`

This function is used to configure a 64-bit unsigned value, *u64*. This is typically used for options related to identifiers, network numbers, and similar.

## RETURN VALUES

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

## ERRORS

`NNG_ECLOSED`

Parameter *s* does not refer to an open socket.

`NNG_EINVAL`

The value being passed is invalid.

`NNG_ENOTSUP`

The option *opt* is not supported.

`NNG_EREADONLY`

The option *opt* is read-only.

`NNG_ESTATE`

The socket is in an inappropriate state for setting this option.

## SEE ALSO

[nng\_getopt(3)](/nng_getopt/3.md), [nng\_dialer\_setopt(3)](/nng_dialer_setopt/3.md), [nng\_listener\_setopt(3)](/nng_listener_setopt/3.md), [nng\_strerror(3)](/nng_strerror/3.md), [nng\_options(5)](/nng_options/5.md), [nng\_socket(5)](/nng_socket/5.md), [nng(7)](/nng/7.md)
