SYNOPSIS

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

-climit

Do not handle more than
limit
simultaneous connections.
If there are
limit
simultaneous copies of
program
running, defer acceptance of a new connection
until one copy finishes.
limit
must be a positive integer.
Default: 40.

-xrules.cdb

Follow the rules compiled into
rules.cdb
by
tcprules.
These rules may specify setting environment variables
or rejecting connections from bad sources.

tcpserver
does not read
rules.cdb
into memory;
you can rerun
tcprules
to change
tcpserver's
behavior on the fly.

-Bbanner

Write
banner
to the network immediately after each connection is made.
tcpserver
writes
banner
before looking up
TCPREMOTEHOST,
before looking up
TCPREMOTEINFO,
and before checking
rules.cdb.

This feature can be used to reduce latency in protocols
where the client waits for a greeting from the server.

-ggid

Switch group ID to
gid
after preparing to receive connections.
gid
must be a positive integer.

-uuid

Switch user ID to
uid
after preparing to receive connections.
uid
must be a positive integer.

-1

After preparing to receive connections,
print the local port number to standard output.

-4

Fall back to IPv4 sockets. This is necessary for terminally broken
systems like OpenBSD which will not let IPv6 sockets connect to
V4-mapped IPv6 addresses. Please note that this also applies to DNS
lookups, so you will have to use an DNS resolver with an IPv6 address to
accept IPv6 connections. Use DNSCACHEIP to set the DNS resolver
IP dynamically.

-6

Force IPv6 mode in UCSPI environment variables, even for
IPv4 connections. This will set $PROTO to TCP6 and put
IPv4-mapped IPv6 addresses in TCPLOCALIP and TCPREMOTEIP.

-Iinterface

Bind to the network interface
interface
("eth0" on Linux, for example). This is only defined and needed for
IPv6 link-local addresses.

-bbacklog

Allow up to
backlog
simultaneous SYN_RECEIVEDs.
Default: 20.
On some systems,
backlog
is silently limited to 5.
See
listen(2)
for more details.

-o

Leave IP options alone.
If the client is sending packets along an IP source route,
send packets back along the same route.

-O

(Default.)
Kill IP options.
A client can still use source routing to connect and to send data,
but packets will be sent back along the default route.

-d

(Default.)
Delay sending data for a fraction of a second whenever the
remote host is responding slowly,
to make better use of the network.

-D

Never delay sending data;
enable TCP_NODELAY.
This is appropriate for interactive connections.

-q

Quiet.
Do not print any messages.

-Q

(Default.)
Print error messages.

-v

Verbose.
Print all available messages.

DATA-GATHERING OPTIONS

-p

Paranoid.
After looking up the remote host name,
look up the IP addresses for that name,
and make sure one of them matches
TCPREMOTEIP.
If none of them do,
unset
TCPREMOTEHOST.

-P

(Default.)
Not paranoid.

-h

(Default.)
Look up the remote host name and set
TCPREMOTEHOST.

-H

Do not look up the remote host name.

-llocalname

Do not look up the local host name;
use
localname
for
TCPLOCALHOST.

-r

(Default.)
Attempt to obtain
TCPREMOTEINFO
from the remote host.

-R

Do not attempt to obtain
TCPREMOTEINFO
from the remote host.

-ttimeout

Give up on the
TCPREMOTEINFO
connection attempt
after
timeout
seconds. Default: 26.