= nng_tcp(7)
//
// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
// Copyright 2018 Capitar IT Group BV <info@capitar.com>
//
// 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/IP transport

== SYNOPSIS

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

int nng_tcp_register(void);
----

== DESCRIPTION

(((transport, _tcp_)))
The ((_tcp_ transport)) provides communication support between
_nng_ sockets across a ((TCP/IP)) network.
Both IPv4 and IPv6 are supported when the underlying platform also supports it.

// We need to insert a reference to the nanomsg RFC.

=== Registration

The _nng_tcp_ transport is generally built-in to the _nng_ core, so
no extra steps to use it should be necessary.

=== URI Format

(((URI, `tcp://`)))
This transport uses URIs using the scheme `tcp://`, followed by
an IP address or hostname, followed by a colon and finally a
TCP port number.(((port number, TCP)))
For example, to contact port 80 on the localhost either of the following URIs
could be used: `tcp://127.0.0.1:80` or `tcp://localhost:80`.

When specifying IPv6 addresses, the address must be enclosed in
square brackets (`[]`) to avoid confusion with the final colon
separating the port.

For example, the same port 80 on the IPv6 loopback address (`::1`) would
be specified as `tcp://[::1]:80`.

NOTE: When using symbolic names, the name is resolved when the
name is first used. _nng_ won't become aware of changes in the
name resolution until restart,
usually.
(This is a bug and will likely be fixed in the future.)

The special value of 0 (`INADDR_ANY`)(((`INADDR_ANY`)))
can be used for a listener to indicate that it should listen on all
interfaces on the host.
A short-hand for this form is to either omit the address, or specify
the asterisk (`*`) character.
For example, the following three URIs are all equivalent,
and could be used to listen to port 9999 on the host:

  1. `tcp://0.0.0.0:9999`
  2. `tcp://*:9999`
  3. `tcp://:9999`

The entire URI must be less than `NNG_MAXADDRLEN` bytes long.

=== Socket Address

When using an <<nng_sockaddr.5#,`nng_sockaddr`>> structure,
the actual structure is either of type
<<nng_sockaddr_in.5#,`nng_sockaddr_in`>> (for IPv4) or
<<nng_sockaddr_in6.5#,`nng_sockaddr_in6`>> (for IPv6).

=== Transport Options

The _nng_tcp_ transport has no special options.

NOTE: Options for TCP keepalive, linger, and nodelay are planned.
 
== SEE ALSO

<<nng_sockaddr.5#,nng_sockaddr(5)>>,
<<nng_sockaddr_in.5#,nng_sockaddr_in(5)>>,
<<nng_sockaddr_in6.5#,nng_sockaddr_in6(5)>>,
<<nng.7#,nng(7)>>
