SYNOPSIS
#include <nng/transport/tcp/tcp.h>
int nng_tcp_register(void);
DESCRIPTION
The nng_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 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
.
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.[1] |
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).
These are struct
types with the following definitions:
#define NNG_AF_INET 3 (1)
#define NNG_AF_INET6 4
#define NNG_MAXADDRLEN 128
typedef struct {
// ... (2)
uint16_t sa_family; // must be NNG_AF_INET
uint16_t sa_port; // TCP port number
uint32_t sa_addr;
// ...
} nng_sockaddr_in;
typedef struct {
// ... (2)
uint16_t sa_family; // must be NNG_AF_INET6
uint16_t sa_port; // TCP port number
uint8_t sa_addr[16];
// ...
} nng_sockaddr_in6;
1 | The values of these macros may change, so applications should avoid depending upon their values and instead use them symbolically. |
2 | Other members may be present, but only those listed here are suitable for application use. |
The sa_family
member will have the value NNG_AF_INET
or NNG_AF_INET6
.
The sa_port
and sa_addr
are the TCP port number and address, both in
network byte order (most significant byte is first).
Transport Options
The tcp transport has no special options.[2]