private void CloseInternal(SocketError socketError, string reason, Exception exception) { if (Interlocked.CompareExchange(ref _isClosed, 1, 0) == 0) { _sendSockerArg?.DisposeCurrent(SendSockerArg_Completed); _receiveSocketArg?.DisposeCurrent(ReceiveSocketArg_Completed); _socket.ShutDownCurrent(); } }