예제 #1
0
        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());
            }
        }
예제 #2
0
        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());
            }
        }