public static object ReadObj(this Socket socket, Type type, int payloadSize)
        {
            if (socket == null) throw new ArgumentNullException(nameof(socket));
            if (type == null) throw new ArgumentNullException(nameof(type));

            using (var networkStream = new NetworkStream(socket, false))
            using (var memoryStream = new MemoryStream())
            {
                networkStream.CopyBufferedLimited(memoryStream, payloadSize);
                string incoming = new ASCIIEncoding().GetString(memoryStream.ToArray());

                return incoming.FromJson(type);
            }
        }