Пример #1
0
        void ProcessReceive()
        {
            var bytesTransferred = _receiveEvent.BytesTransferred;

            if (bytesTransferred > 0 && _receiveEvent.SocketError == SocketError.Success)
            {
                int oldState, newState;
                do
                {
                    oldState = _state;
                    newState = oldState & ~(int)State.Receive;
                } while (Interlocked.CompareExchange(ref _state, newState, oldState) != oldState);
                _handler.FinishReceive(_receiveEvent.Buffer, _receiveEvent.Offset, bytesTransferred);
            }
            else
            {
                int oldState, newState;
                do
                {
                    oldState = _state;
                    newState = (oldState & ~(int)State.Receive) | (int)State.Aborting;
                } while (Interlocked.CompareExchange(ref _state, newState, oldState) != oldState);
                _handler.FinishReceive(null, 0, -1);
            }
        }
Пример #2
0
        void ProcessReceive()
        {
            bool postponedAccept;
            var  bytesTransferred = _receiveEvent.BytesTransferred;

            int oldState, newState;

            do
            {
                oldState        = _state;
                postponedAccept = (oldState & (int)State.DelayedAccept) != 0;
                newState        = oldState & ~(int)(State.Receive | State.DelayedAccept);
            } while (Interlocked.CompareExchange(ref _state, newState, oldState) != oldState);

            if (bytesTransferred > 0 && _receiveEvent.SocketError == SocketError.Success)
            {
                _handler.FinishReceive(_receiveEvent.Buffer, _receiveEvent.Offset, bytesTransferred);
            }
            else
            {
                _handler.FinishReceive(null, 0, -1);
            }
            if (postponedAccept)
            {
                _handler.PrepareAccept();
            }
        }
Пример #3
0
 public void StartReceive(byte[] buffer, int offset, int length)
 {
     _recvBuffer = buffer;
     _recvOffset = offset;
     _recvLength = length;
     try
     {
         _ssl.ReadAsync(buffer, offset, length).ContinueWith((t, selfObject) =>
         {
             var self = (SslTransportHandler)selfObject;
             if (t.IsFaulted || t.IsCanceled || t.Result == 0)
             {
                 self._next.FinishReceive(null, 0, -1);
             }
             else
             {
                 self._next.FinishReceive(self._recvBuffer, self._recvOffset, t.Result);
             }
         }, this);
     }
     catch (Exception)
     {
         _next.FinishReceive(null, 0, -1);
     }
 }
Пример #4
0
        public void StartReceive(byte[] buffer, int offset, int length)
        {
            _recvBuffer = buffer;
            _recvOffset = offset;
            _recvLength = length;
            try
            {
                if (!_authenticateTask.IsCompleted)
                {
                    _authenticateTask.ContinueWith((t, selfObject) =>
                    {
                        var self = (SslTransportHandler)selfObject;
                        if (t.IsCanceled || t.IsFaulted)
                        {
                            self._next.FinishReceive(null, 0, -1);
                        }
                        else
                        {
                            try
                            {
                                self._ssl.ReadAsync(self._recvBuffer, self._recvOffset, self._recvLength).ContinueWith((t2, selfObject2) =>
                                {
                                    var self2 = (SslTransportHandler)selfObject2;
                                    if (t2.IsFaulted || t2.IsCanceled || t2.Result == 0)
                                    {
                                        self2._next.FinishReceive(null, 0, -1);
                                    }
                                    else
                                    {
                                        self2._next.FinishReceive(self2._recvBuffer, self2._recvOffset, t2.Result);
                                    }
                                }, self);
                            }
                            catch (Exception)
                            {
                                self._next.FinishReceive(null, 0, -1);
                            }
                        }
                    }, this);
                    return;
                }

                if (_authenticateTask.IsCanceled || _authenticateTask.IsFaulted)
                {
                    _next.FinishReceive(null, 0, -1);
                    return;
                }

                _ssl.ReadAsync(buffer, offset, length).ContinueWith((t, selfObject) =>
                {
                    var self = (SslTransportHandler)selfObject;
                    if (t.IsFaulted || t.IsCanceled || t.Result == 0)
                    {
                        self._next.FinishReceive(null, 0, -1);
                    }
                    else
                    {
                        self._next.FinishReceive(self._recvBuffer, self._recvOffset, t.Result);
                    }
                }, this);
            }
            catch (Exception)
            {
                _next.FinishReceive(null, 0, -1);
            }
        }