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