private async Task <bool> AcceptPeers()
 {
     while (!cancellationTokenSource.IsCancellationRequested)
     {
         Socket socket;
         try
         {
             socket = await listener.AcceptSocketAsync();
         }
         catch (ObjectDisposedException)
         {
             return(false);
         }
         catch (SocketException)
         {
             continue;
         }
         TcpRemoteNode remoteNode = new TcpRemoteNode(this, socket);
         OnConnected(remoteNode);
     }
     return(true);
 }
        public async Task ConnectToPeerAsync(IPEndPoint remoteEndpoint)
        {
            if (remoteEndpoint.Port == Port && LocalAddresses.Contains(remoteEndpoint.Address))
            {
                return;
            }
            lock (unconnectedPeers)
            {
                unconnectedPeers.Remove(remoteEndpoint);
            }
            lock (connectedPeers)
            {
                if (connectedPeers.Any(p => remoteEndpoint.Equals(p.ListenerEndpoint)))
                {
                    return;
                }
            }
            TcpRemoteNode remoteNode = new TcpRemoteNode(this, remoteEndpoint);

            if (await remoteNode.ConnectAsync())
            {
                OnConnected(remoteNode);
            }
        }