private void PipeRemoteReceiveLoop()
            {
                bool final_close = false;

                byte[]   recv_buffer   = new byte[RecvSize];
                DateTime beforeReceive = DateTime.Now;

                while (!_closed)
                {
                    try
                    {
                        int      bytesRead = _remote.Receive(recv_buffer, RecvSize, 0);
                        DateTime now       = DateTime.Now;
                        if (_remote != null && _remote.IsClose)
                        {
                            final_close = true;
                            break;
                        }
                        if (_closed)
                        {
                            break;
                        }
                        ResetTimeout(TTL);

                        if (bytesRead > 0)
                        {
                            _local.Send(recv_buffer, bytesRead, 0);

                            if ((now - beforeReceive).TotalSeconds > 5)
                            {
                                _totalRecvSize = 0;
                                _remote.BeginReceive(remoteRecvBuffer, RecvSize, 0,
                                                     new AsyncCallback(PipeRemoteReceiveCallback), null);
                                return;
                            }
                            else
                            {
                                beforeReceive = now;
                            }
                        }
                        else
                        {
                            Close();
                        }
                    }
                    catch (Exception e)
                    {
                        Logging.LogUsefulException(e);
                        final_close = true;
                        break;
                    }
                }
                if (final_close)
                {
                    Close();
                }
            }
            private void PipeRemoteReceiveLoop()
            {
                bool final_close = false;

                byte[] recv_buffer = new byte[RecvSize];
                while (!_closed)
                {
                    try
                    {
                        int bytesRead = _remote.Receive(recv_buffer, RecvSize, 0);
                        if (_remote != null && _remote.IsClose)
                        {
                            final_close = true;
                            break;
                        }
                        if (_closed)
                        {
                            break;
                        }
                        ResetTimeout(TTL);

                        if (bytesRead > 0)
                        {
                            _local.Send(recv_buffer, bytesRead, 0);
                        }
                        else
                        {
                            Close();
                        }
                    }
                    catch (Exception e)
                    {
                        Logging.LogUsefulException(e);
                        final_close = true;
                        break;
                    }
                }
                if (final_close)
                {
                    Close();
                }
            }