The example in src/dhtproto/client/DhtClient.d is essentially
// Initialise dht client -- Step 2
auto dht = new DhtClient(epoll, NumConnections);
// Add nodes -- Step 3
...
// Perform node handshake -- Step 4
dht.nodeHandshake(&handshake, ¬ify);
epoll.eventLoop();
// Perform a Get request -- Step 5
dht.assign(dht.get("my_channel", key, &receive_value, ¬ify));
However, step 5 will never be reached. The reason is that nodeHandshake() leaves events registered with epoll (they are all of the form 10: ConnectProtocol fd=177 events=ReRh, I think they are listening for read events on each node?)
So eventLoop() never returns.