public override Peer Start(string address)
        {
            if (_session != null)
            {
                return(this);
            }

            _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            _session = AddSession(_socket, _queue);

            var addr = new NetworkAddress();

            addr.Resolve(address, ResolveDNS, delegate
            {
                BeginConnect(addr.AddressList, addr.Port);
            });

            return(this);
        }