https://github.com/ClickHouse/ClickHouse/blob/289a51b61d636e9b2ac98dc912d4d1894cc31e2e/src/Common/formatIPv6.h#L14

According to this [link](https://stackoverflow.com/questions/166132/maximum-length-of-the-textual-representation-of-an-ipv6-address), the Maxiumn length of IPv6 textual representation should be 45.
* Parses the input string `src` and stores binary host-endian value into buffer pointed by `dst`,
 * which should be long enough.
 * That is "127.0.0.1" becomes 0x7f000001.
 *
 * In case of failure returns false and doesn't modify buffer pointed by `dst`.
 *
 * @param src - input string, expected to be non-null and null-terminated right after the IPv4 string value.
 * @param dst - where to put output bytes, expected to be non-null and at IPV4_BINARY_LENGTH-long.
 * @return false if parsing failed, true otherwise.
 */
inline bool parseIPv4(const char * src, unsigned char * dst)
{
    UInt32 result = 0;
    for (int offset = 24; offset >= 0; offset -= 8)
    {
        UInt32 value = 0;
        size_t len = 0;
        while (isNumericASCII(*src) && len <= 3)
        {
            value = value * 10 + (*src - '0');
            ++len;
            ++src;
        }
        if (len == 0 || value > 255 || (offset > 0 && *src != '.'))
            return false;
        result |= value << offset;
        ++src;
    }
    if (*(src - 1) != '\0')
        return false;