The traditional setup is to use inetd to open listening sockets, similar to what systemd is doing with socket activation now, only thirty years before that. inetd will unconditionally start the daemon when a connection comes in.
For some rudimentary access control, you'd configure inetd to start tcpd instead of the real server. This program would check that the connection is allowed according to the hosts.allow and hosts.deny files, and then execute the real service if it is.
This is significantly older than iptables or similar host-based firewall solutions, so it will also work on stacks that do not have a firewall at all, like AmiTCP or Miami on AmigaOS.
The other upside is that the configuration to check the source address is part of service startup, so once it is configured, there is no way to accidentally expose services by flushing the firewall rules.
The downside is that the port is initially open, so a network scan will show it, and the connection is immediately closed after it has been established.
The hosts.allow and hosts.deny files are no longer shipped, as "missing" files mean "allow all connections", so these form a valid configuration on their own, and anyone still using them probably knows what they are doing.
Note that when you use tcpd for access control, you lose the benefit of the wait option in inetd, where the service is started with the listener socket and is responsible for accepting further connections after being started (i.e. where you only have a single instance for multiple parallel connections).
There is no udpd, because verifying the source of UDP packets is impossible.