= nng_tcp(5)
//
// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
// Copyright 2018 Capitar IT Group BV <info@capitar.com>
// Copyright 2019 Devolutions <info@devolutions.net>
//
// 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_tcp - TCP connection

== SYNOPSIS

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

typedef struct nng_tcp_s nng_tcp;
----

== DESCRIPTION

An `nng_tcp` (((TCP connection))) represents a connected stream.
TCP stream objects can be used to send or receive data.

NOTE: The `nng_tcp` object is used for raw TCP connections, and
should not be confused with a pipe object created using the
xref:nng_tcp.7.adoc[nng_tcp(7)] transport.

TIP: Most NNG applications should not use this, but instead use the
xref:nng_tcp.7.adoc[nng_tcp(7)] transport instead.

These objects are created either establishing an outgoing connection
with xref:nng_tcp_dialer_dial.3tcp.adoc[`nng_tcp_dialer_dial()`] or by
accepting in incoming connection with
xref:nng_tcp_listener_accept.3tcp.adoc[`nng_tcp_listener_accept()`].

TCP connections are byte streams, and are "`reliable`" in that data
will not be delivered out of order, or with portions missing.

Data can be sent using xref:nng_tcp_send.3tcp.adoc[`nng_tcp_send()`] or
received with xref:nng_tcp_recv.3tcp.adoc[`nng_tcp_recv()`].

When the connection is no longer needed, it should be freed with
xref:nng_tcp_free.3tcp.adoc[`nng_tcp_free()`].

TIP: It is possible to close the connection, without freeing it, by
using xref:nng_tcp_close.3tcp.adoc[`nng_tcp_close()`].

=== Options

The following options are applicable to TCP connections, and may be
accessed using the xref:nng_tcp_getopt.3tcp.adoc[`nng_tcp_getopt()`] and
xref:nng_tcp_setopt.3tcp.adoc[`nng_tcp_setopt()`] functions.

* xref:nng_options.5.adoc#NNG_OPT_LOCADDR[`NNG_OPT_LOCADDR`]
* xref:nng_options.5.adoc#NNG_OPT_REMADDR[`NNG_OPT_REMADDR`]
* xref:nng_tcp_options.5.adoc#NNG_OPT_TCP_NO_DELAY[`NNG_OPT_TCP_NODELAY`]
* xref:nng_tcp_options.5.adoc#NNG_OPT_TCP_KEEPALIVE[`NNG_OPT_TCP_KEEPALIVE`]
* xref:nng_tcp_options.5.adoc#NNG_OPT_TCP_BOUND_PORT[`NNG_OPT_TCP_BOUND_PORT`]

Other platform specific options may be available as well.

== SEE ALSO

[.text-left]
xref:libnng.3.adoc[libnng(3)],
xref:nng_tcp_close.3tcp.adoc[nng_tcp_close(3tcp)],
xref:nng_tcp_dialer_dial.3tcp.adoc[nng_tcp_dialer_dial(3tcp)],
xref:nng_tcp_free.3tcp.adoc[nng_tcp_free(3tcp)],
xref:nng_tcp_getopt.3tcp.adoc[nng_tcp_getopt(3tcp)],
xref:nng_tcp_listener_accept.3tcp.adoc[nng_tcp_listener_accept(3tcp)],
xref:nng_tcp_recv.3tcp.adoc[nng_tcp_recv(3tcp)],
xref:nng_tcp_send.3tcp.adoc[nng_tcp_send(3tcp)],
xref:nng_tcp_setopt.3tcp.adoc[nng_tcp_setopt(3tcp)],
xref:nng_options.5.adoc[nng_options(5)],
xref:nng_tcp_options.5.adoc[nng_tcp_options(5)],
xref:nng.7.adoc[nng(7)]
