private async Task AcceptPeers() { #if !NET47 //There is a bug in .NET Core 2.0 that blocks async method which returns void. await Task.Yield(); #endif while (!cancellationTokenSource.IsCancellationRequested) { Socket socket; try { socket = await listener.AcceptSocketAsync(); } catch (ObjectDisposedException) { break; } catch (SocketException) { continue; } TcpRemoteNode remoteNode = new TcpRemoteNode(this, socket); OnConnected(remoteNode); } }
public async Task ConnectToPeerAsync(IPEndPoint remoteEndpoint) { TR.Enter(); if (remoteEndpoint.Port == Port && LocalAddresses.Contains(remoteEndpoint.Address.MapToIPv6())) { TR.Exit(); return; } lock (unconnectedPeers) { unconnectedPeers.Remove(remoteEndpoint); } lock (connectedPeers) { if (connectedPeers.Any(p => remoteEndpoint.Equals(p.ListenerEndpoint))) { TR.Exit(); return; } } TR.Log(); TcpRemoteNode remoteNode = new TcpRemoteNode(this, remoteEndpoint); TR.Log(); IndentContext ic = TR.SaveContextAndShuffle(); bool connected = await remoteNode.ConnectAsync(); TR.RestoreContext(ic); if (connected) { TR.Log(); OnConnected(remoteNode); } TR.Exit(); }
private async void AcceptPeers() { #if !NET47 //There is a bug in .NET Core 2.0 that blocks async method which returns void. await Task.Yield(); #endif TR.Enter(); while (!cancellationTokenSource.IsCancellationRequested) { Socket socket; IndentContext ic = TR.SaveContextAndShuffle(); try { socket = await listener.AcceptSocketAsync(); } catch (ObjectDisposedException) { break; } catch (SocketException) { continue; } finally { TR.RestoreContext(ic); } TcpRemoteNode remoteNode = new TcpRemoteNode(this, socket); OnConnected(remoteNode); } TR.Exit(); }
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); } }
private async void AcceptPeersAsync() { while (disposed == 0) { Socket socket; try { socket = await listener.AcceptSocketAsync(); } catch (ObjectDisposedException) { break; } catch (SocketException) { break; } TcpRemoteNode remoteNode = new TcpRemoteNode(this, socket); OnConnected(remoteNode); } }
private async void AcceptPeers() { while (!cancellationTokenSource.IsCancellationRequested) { Socket socket; try { socket = await listener.AcceptSocketAsync(); } catch (ObjectDisposedException) { break; } catch (SocketException) { continue; } TcpRemoteNode remoteNode = new TcpRemoteNode(this, socket); OnConnected(remoteNode); } }