Beispiel #1
0
        private void EnsureCapacity(int size)
        {
            // return the old segment and get a new, bigger one
            var newSegment = BufferManager.GetSegment(size);

            _segment.CopyTo(newSegment, _length);
            m_Position = m_Position - _segment.Offset + newSegment.Offset;

            _segment.DecrementUsage();
            _segment = newSegment;
        }
Beispiel #2
0
        private void ProcessRecieve(SocketAsyncEventArgs args)
        {
            try
            {
                var bytesReceived = args.BytesTransferred;

                if (args.BytesTransferred == 0)
                {
                    OnClosed();
                }
                else
                {
                    unchecked
                    {
                        _bytesReceived += (uint)bytesReceived;
                    }

                    Interlocked.Add(ref _totalBytesReceived, bytesReceived);


                    OnDataArrival(_bufferSegment.SegmentData); // weird interactions

                    _bufferSegment.DecrementUsage();
                    _bufferSegment = Buffers.CheckOut();
                    //_offset = 0;

                    //else
                    //{
                    //    EnsureBuffer();
                    //}

                    Receive();
                }
            }
            catch (LibraryNotLoadedException ex)
            {
                throw ex;
            }
            catch (ObjectDisposedException)
            {
                OnClosed();
            }
            catch (Exception)
            {
                OnClosed();
            }
            finally
            {
                args.Completed -= ReceiveAsyncComplete;
                SocketHelpers.ReleaseSocketArg(args);
            }
        }
Beispiel #3
0
 protected void EnsureBuffer() //(int size)
 {
     //if (size > BufferSize - _offset)
     {
         // not enough space left in buffer: Copy to new buffer
         var newSegment = Buffers.CheckOut();
         Array.Copy(_bufferSegment.Buffer.Array,
                    _bufferSegment.Offset + _offset,
                    newSegment.Buffer.Array,
                    newSegment.Offset,
                    _remainingLength);
         _bufferSegment.DecrementUsage();
         _bufferSegment = newSegment;
         _offset        = 0;
     }
 }