public void ReceiveMessages() { while (_socket.Available > 0) { var size = Math.Min(_buffer.Length - _received, _socket.Available); _received += _socket.Receive(_buffer, _received, size, SocketFlags.None); var offset = 0; while (MsgSerializer.CheckBufferForMsg(_buffer, _received, offset, out var msgSize, out var msgId)) { ReadMsg(msgId, _buffer, offset); offset += msgSize; _receiveTimer.Restart(); } Array.Copy(_buffer, offset, _buffer, 0, _received - offset); _received -= offset; if (_received >= _buffer.Length) { throw new MsgPipeException("Failed to receive message: buffer too small"); } } }