public void BeginReceiveCallbackProcessing(object state)
        {
            _lock.AcquireReaderLock();
            try
            {
                if (IsClosed || IsClosing || IsDisconnecting)
                {
                    return; // Already shutting down.
                }
            }
            finally
            {
                _lock.ReleaseReaderLock();
            }
            //log4net.ThreadContext.Properties["ClientIP"] = this.RemoteEndPoint;
            // NOTE TODO Common.Logging get clientIP
            if (log.IsDebugEnabled)
            {
                log.Debug(__Res.GetString(__Res.Rtmp_SocketReceiveProcessing, _connectionId));
            }

            byte[] buffer = null;
            try
            {
                buffer = SocketBufferPool.CheckOut();
                _rtmpNetworkStream.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(BeginReadCallbackProcessing), buffer);
            }
            catch (ObjectDisposedException)
            {
                //The underlying socket may be closed
            }
            catch (Exception ex)
            {
                SocketBufferPool.CheckIn(buffer);
                HandleError(ex);
            }
        }