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