private void AcceptTcpClient(IAsyncResult asyncResult) { if (!(asyncResult.AsyncState is TcpListener asyncState)) { throw new Exception("Non-TcpListener AsyncState"); } var clientPair = new ClientPair(); try { clientPair.connectRetryCount = 0; clientPair.disconnected = false; clientPair.source = asyncState.EndAcceptTcpClient(asyncResult); clientPair.target = new TcpClient(); clientPair.target.BeginConnect(_targetHost, _targetPort, TargetConnect, clientPair); asyncState.BeginAcceptTcpClient(AcceptTcpClient, _listener); } catch (ObjectDisposedException) { } catch (Exception ex) { Trace.TraceError("Failed when trying to accept new clients with '{0}'", (object)ex.ToString()); } }
private void DisconnectPair(ClientPair pair) { if (pair.disconnected) { return; } try { try { if (pair.target.Client.Connected) { pair.target.Client.Close(); } } catch { } if (!pair.disconnected) { pair.disconnected = true; } try { if (!pair.source.Client.Connected) { return; } pair.source.Client.Close(); } catch { } } catch (Exception ex) { Trace.TraceError(ex.ToString()); } }