public static void SetBuffer(this SocketAsyncEventArgs args, ByteString data) { if (data.IsCompact) { var buffer = data.Buffers[0]; if (args.BufferList != null) { // BufferList property setter is not simple member association operation, // but the getter is. Therefore we first check if we need to clear buffer list // and only do so if necessary. args.BufferList = null; } args.SetBuffer(buffer.Array, buffer.Offset, buffer.Count); } else { if (RuntimeDetector.IsMono) { // Mono doesn't support BufferList - falback to compacting ByteString var compacted = data.Compact(); var buffer = compacted.Buffers[0]; args.SetBuffer(buffer.Array, buffer.Offset, buffer.Count); } else { args.SetBuffer(null, 0, 0); args.BufferList = data.Buffers; } } }