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); } }