SYNOPSIS
#include <nng/transport/tcp/tcp.h>
int nng_tcp_register(void);
DESCRIPTION
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.
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
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.
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
.
A URI may be restricted to IPv6 using the scheme tcp6://
, and may
be restricted to IPv4 using the scheme tcp4://
.
Specifying tcp6:// may not prevent IPv4 hosts from being used with
IPv4-in-IPv6 addresses, particularly when using a wildcard hostname with
listeners.
The details of varies across operating systems.
|
Both tcp6:// and tcp4:// are nng extensions, and will not
be understood by other implementations such as libnanomsg.
|
We recommend using either numeric IP addresses, or names that are specific to either IPv4 or IPv6 to prevent confusion and surprises. |
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
.
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
)
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:
-
tcp://0.0.0.0:9999
-
tcp://*:9999
-
tcp://:9999
The entire URI must be less than NNG_MAXADDRLEN
bytes long.
Socket Address
When using an nng_sockaddr
structure,
the actual structure is either of type
nng_sockaddr_in
(for IPv4) or
nng_sockaddr_in6
(for IPv6).
Transport Options
NNG_OPT_TCP_KEEPALIVE
-
This option is used to configure TCP keep-alives. The value is of type
bool
, and defaults tofalse
. NNG_OPT_TCP_NODELAY
-
This option is used to configure Nagle’s algorithm. When enabled (
false
), the underlying TCP stream will attempt to buffer and coalesce messages before sending them on, waiting a short interval to improve buffering and reduce the overhead caused by sending too-small messages. This comes at a cost to latency, and is not recommended with modern high speed networks. The value is of typebool
and defaults totrue
.