Getting started

From zero to a running hub in a few simple steps.

1. Build uhub

Download the sources and compile them. On most systems this is just CMake and make.

2. Create a configuration file

This step is optional — if no configuration files are present, uhub starts with sensible defaults. To customise the hub, edit /etc/uhub/uhub.conf as root:

hub_name = My Public Hub
hub_description = Yet another ADC hub

server_port = 1511
server_bind_addr = any
max_users = 150

3. Start the hub

Run uhub in the foreground for the first time. Stop it with Ctrl+C.

$ uhub
INFO: Starting server, listening on :::1511...

4. Connect with a client

Point an ADC client at adc://localhost:1511, replacing localhost with the correct hostname or IP address.

Note: the adc:// prefix and the port number are required when connecting with DC++ and other ADC clients.

5. Use all CPU cores (optional)

uhub is single-threaded, so a single process uses one CPU core. On a multi-core machine you can run the hub as several linked worker processes that share the client port and together present one logical hub. Set in uhub.conf:

workers = 4      # number of worker processes, or 0 for one per CPU core

The top-level process then becomes a master that forks the workers, supervises them (restarting any that exit) and serves no clients itself. Each worker binds server_port with SO_REUSEPORT, so the kernel load-balances incoming connections across cores, and the workers link to each other over Unix sockets in worker_socket_dir (default /tmp) to share one user list and SID space. This mainly speeds up the CPU-bound per-connection work — notably TLS.

Running one hub across cores is a special case of hub linking (federation), which can also join hubs across separate machines. See that guide for the full picture and the trade-offs.

Your mileage may vary — good luck!