Also took the time to change address storage to shared pointer per address in the circular buffer. Each address is 30 bytes, so this made each effectively 38 bytes. For a 100k address pool that's 800kb more data. This eliminates the dynamic conversion/copy cost to shared pointer I/O from the pool. But it's not worth it, as the size increase isn't offset by any noticeable performance benefit, even with huge connectivity. So backed that out.