public override void Close()
            {
                if (mConnection == null)
                {
                    throw new IOException("Already closed");
                }

                if (mControlInterface != null)
                {
                    mControlInterface.Dispose();
                    mControlInterface = null;
                }

                if (mDataInterface != null)
                {
                    mDataInterface.Dispose();
                    mDataInterface = null;
                }

                if (mControlEndpoint != null)
                {
                    mControlEndpoint.Dispose();
                    mControlEndpoint = null;
                }

                if (mReadEndpoint != null)
                {
                    mReadEndpoint.Dispose();
                    mReadEndpoint = null;
                }

                if (mWriteEndpoint != null)
                {
                    mWriteEndpoint.Dispose();
                    mWriteEndpoint = null;
                } //richard: dispose to avoid GREF leak

                mConnection.Close();
                mConnection.Dispose();//richard: dispose to avoid GREF leak
                mConnection = null;
            }