public static Connection Parse(string value)
        {
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            string[] parts = value.Split(' ');

            if (parts.Length != 3)
            {
                throw new FormatException("Value do not contain 3 parts as needed.");
            }

            if (parts[0] != "IN")
            {
                throw new NotSupportedException(string.Format(CultureInfo.InvariantCulture, "Net type {0} not suported", parts[0]));
            }

            switch (parts[1])
            {
            case "IP4":
                return(ConnectionIP4.Parse(parts[2]));

            case "IP6":
                return(ConnectionIP6.Parse(parts[2]));

            default:
                throw new NotSupportedException(string.Format(CultureInfo.InvariantCulture, "Address type {0} not suported", parts[1]));
            }
        }
        internal new static ConnectionIP6 Parse(string ipAddress)
        {
            string[] parts = ipAddress.Split('/');

            if (parts.Length > 2)
            {
                throw new FormatException("Too much address subpart in " + ipAddress);
            }

            ConnectionIP6 result = new ConnectionIP6();

            result.Host = parts[0];

            int numberOfAddress;

            if (parts.Length > 1)
            {
                if (!int.TryParse(parts[1], NumberStyles.Integer, CultureInfo.InvariantCulture, out numberOfAddress))
                {
                    throw new FormatException("Invalid number of address : " + parts[1]);
                }
                result.NumberOfAddress = numberOfAddress;
            }

            return(result);
        }