The reconnect delays should probably be configurable: maybe pass a config struct to NewListener?