#include <x/fd.H> #include <x/httportmap.H> x::fd socket(x::fd::base::socket(AF_INET6, SOCK_STREAM)); socket->bind(x::sockaddr::create(AF_INET6, "", 0)); socket->listen(); x::httportmap portmapper(x::httportmap::create()); if (!portmapper->reg("test.example.com", socket, x::httportmap::base::pm_exclusive)) { std::cerr << "Application already started" << std::endl; exit(1); }
This example creates and listens on an AF_INET6
socket (on Linux, AF_INET6
sockets, by default, also
accept IPv4 connections).
A default
x::httportmap
instance represents a connection to a portmapper daemon on the same server.
reg
() registers the listening socket with the
portmapper under the application name of “test.example.com”.
Application names are arbitrary labels, however they may not contain any
control characters, and they should be valid domain names or email
addresses, and applications should use only Internet domains that they
own. This way, the application name domain is globally unique and
different applications names will not clash.
This implementation reserves application names ending with
“.libcxx
” for internal use.
All applications are registered by their name AND
the application's userid. The third parameter to
reg
() indicates whether the application registration
is exclusive. If true
, the portmapper will not
register the same application name and userid more than once.
The portmapper accepts the same application name registered by
different userids. If false
, the same userid can
register the same application name more than once.
Multiple services may be registered through the same portmapper object. The port remains registered as long as the portmapper object remains in scope. The portmapper object maintains an open socket connection with the local portmapper daemon. When the process terminates, or when the portmapper object goes out of scope and gets destroyed, all services registered by the object gets deregistered.
The default portmapper configuration limits each process to ten registered services, at a time.