protected virtual void OnChannelError(object o, ChannelCloseEventArgs e)
        {
            if (e.Exception != null)
            {
                RaiseError(e.Exception);
            }
            else if (e.SocketError != null)
            {
                RaiseError(new SocketErrorException(e.SocketError.Value));
            }

            // when both are null, the socket is closed normally
        }
 private void OnDuplexChannelClosed(object o, ChannelCloseEventArgs e)
 {
     closeErrorData[e.DuplexSide] = e;
 }