public async Task <bool> ReadAsync(PooledSocket socket) { this.StatusCode = -1; if (!socket.IsAlive) { return(false); } var header = new byte[HeaderLength]; await socket.ReadAsync(header, 0, header.Length); int dataLength, extraLength; DeserializeHeader(header, out dataLength, out extraLength); if (dataLength > 0) { var data = new byte[dataLength]; await socket.ReadAsync(data, 0, dataLength); this.Extra = new ArraySegment <byte>(data, 0, extraLength); this.Data = new ArraySegment <byte>(data, extraLength, data.Length - extraLength); } return(this.StatusCode == 0); }