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); } }
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(); } }
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); } }
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); } }