tcpserver - accept incoming TCP connections

Synopsis

tcpserver [ -146jpPhHrRoOdDqQv ] [ -c limit ] [ -x rules.cdb ] [ -B banner] [ -g gid ] [ -u uid ] [ -b backlog ] [ -l localname ] [ -t timeout ] [ -I ifname ] host port program [ arg ... ]

Description

tcpserver waits for connections from TCP clients. For each connection, it runs program with the given arguments, with descriptor 0 reading from the network and descriptor 1 writing to the network.

The server's address is given by host and port. host can be 0, allowing connections from any host; or a particular IP address, allowing connections only to that address; or a host name, allowing connections to the first IP address for that host. port may be a numeric port number or a port name. If port is 0, tcpserver will choose a free port.

tcpserver sets up several environment variables, as described in tcp-environ(5).

tcpserver exits when it receives SIGTERM.

Options

Data-Gathering Options

Bindings

tcpserver can specifically bound to the local available IPv4 -4 or IPv6 -6 addresses (or both; omitting this option) on the host while starting the service.

Setting up tcpserver with host 0 will bind to any available IP address on any interface, including the loopback addresses ::1 and 127.0.0.1, however excluding IPv6 link-local unicast (LLU) addresses for the given port.

In order to bind tcpserver to a LLU IPv6 address (ie. fe80::a:b:c) additionally the interface name -i ifname has to be provided.

Note: The kernel might use temporary changing SLAAC addresses.

IPv4-mapped IPv6 addresses

Setting up tcpserver with simultaneous bindings to IPv4 and IPv6 addresses, the Unix kernel emplopys the mapping

::ffff:a.b.c.d
for the IPv4 address
a.b.c.d

Setting up tcpserver in IPv4 mode only -4 or in compatibility mode, IPv4 addresses are considered in their native format without the IPv6 prefix. Thus, usual IPv4 addresses can be entered in rules.cdb even in common IPv4/IPv6 bindings.

Loopback addresses

IPv4 and IPv6 have a significant different understanding of loopback addresses:

127./8
::1/128

Instead of using the respective IP addresses, the alias

localhost

should be used for the binding and a potential filter-rule instead:

=localhost:allow

Environment variables read

tcpserver reads the environment variable DNSCACHEIP which can be used to specify the recursive DNS Resolver.

Environment Variables set

tcpserver provides the following environment variables:

PROTO this is either TCP or TCP6.

The interface name for IPv6 connections: TCP6INTERFACE.

The local information: TCPLOCALIP, TCP6LOCALIP, TCPLOCALPORT, TCP6LOCALPORT, TCPLOCALHOST, TCP6LOCALHOST.

The IP address of connection: TCPREMOTEIP and TCP6REMOTEIP which is the IPv4-mapped IPv6 address in case of IPv4 connections.

The remote port number: TCPREMOTEPORT, TCP6REMOTEPORT.

The hostname (FQDN) of the peer, if available: TCPREMOTEHOST, TCP6REMOTEHOST.

In case of a successful IDENT lookup: TCPREMOTEINFO.

Logging

Invoking tcpserver with the option -v will provide a logging of the session including (if possible) the hostnames in case the option -h is given, as well as the used IP addresses and ports of the peers. The displayed IP addresses are shown either als generic compactified IPv6 addresses, or as IPv6-mapped IPv4 addresses unless tcpserver is solely bound to an IPv4 address.

See also

argv0(1), fixcr(1), recordio(1), tcpclient(1), tcprules(1), listen(2), tcp-environ(5)