{"record":{"id":"382dbb6d647f937c","repo":"jstedfast/MailKit","slug":"the-host-address-must-be-an-ipv4-or-ipv6-address","errorCode":null,"errorMessage":"The host address must be an IPv4 or IPv6 address.","messagePattern":"The host address must be an IPv4 or IPv6 address\\.","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"MailKit/Net/Proxy/Socks5Client.cs","lineNumber":165,"sourceCode":"\t\t\tcase Socks5Reply.NetworkUnreachable:      return \"Network unreachable.\";\n\t\t\tcase Socks5Reply.HostUnreachable:         return \"Host unreachable.\";\n\t\t\tcase Socks5Reply.ConnectionRefused:       return \"Connection refused.\";\n\t\t\tcase Socks5Reply.TTLExpired:              return \"TTL expired.\";\n\t\t\tcase Socks5Reply.CommandNotSupported:     return \"Command not supported.\";\n\t\t\tcase Socks5Reply.AddressTypeNotSupported: return \"Address type not supported.\";\n\t\t\tdefault:                                  return string.Format (CultureInfo.InvariantCulture, \"Unknown error ({0}).\", (int) reply);\n\t\t\t}\n\t\t}\n\n\t\tinternal static Socks5AddressType GetAddressType (string host, out IPAddress? ip)\n\t\t{\n\t\t\tif (!IPAddress.TryParse (host, out ip))\n\t\t\t\treturn Socks5AddressType.Domain;\n\n\t\t\tswitch (ip.AddressFamily) {\n\t\t\tcase AddressFamily.InterNetworkV6: return Socks5AddressType.IPv6;\n\t\t\tcase AddressFamily.InterNetwork: return Socks5AddressType.IPv4;\n\t\t\tdefault: throw new ArgumentException (\"The host address must be an IPv4 or IPv6 address.\", nameof (host));\n\t\t\t}\n\t\t}\n\n\t\tvoid VerifySocksVersion (byte version)\n\t\t{\n\t\t\tif (version != (byte) SocksVersion)\n\t\t\t\tthrow new ProxyProtocolException (string.Format (CultureInfo.InvariantCulture, \"Proxy server responded with unknown SOCKS version: {0}\", (int) version));\n\t\t}\n\n\t\tbyte[] GetNegotiateAuthMethodCommand (Socks5AuthMethod[] methods)\n\t\t{\n\t\t\t// +-----+----------+----------+\n\t\t\t// | VER | NMETHODS | METHODS  |\n\t\t\t// +-----+----------+----------+\n\t\t\t// |  1  |    1     | 1 to 255 |\n\t\t\t// +-----+----------+----------+\n\t\t\tvar buffer = new byte[2 + methods.Length];\n\t\t\tint n = 0;","sourceCodeStart":147,"sourceCodeEnd":183,"githubUrl":"https://github.com/jstedfast/MailKit/blob/9d3859a7855e3e17582c07fd01972b8e262bf176/MailKit/Net/Proxy/Socks5Client.cs#L147-L183","documentation":"Socks5Client.GetAddressType classifies the host string; if IPAddress.TryParse succeeds but yields an AddressFamily other than IPv4/IPv6 (defensive branch), the client cannot encode it in the SOCKS5 connect request and throws an ArgumentException. In practice this is nearly unreachable and signals a malformed/unsupported address string.","triggerScenarios":"Calling Socks5Client.ConnectAsync with a host string that parses as an IPAddress but is neither IPv4 nor IPv6 (edge-case parse results); ordinary domains and IPv4/IPv6 literals never hit it.","commonSituations":"Passing odd address-like strings (e.g. numeric forms) that the platform's IPAddress.TryParse accepts on some framework versions but the SOCKS encoder does not support.","solutions":["Pass a plain hostname, a standard dotted-quad IPv4 literal, or a normal IPv6 literal as host","If you already have an IPAddress object, verify ip.AddressFamily is InterNetwork or InterNetworkV6 before calling","Upgrade MailKit; newer IPAddress.TryParse behavior may have caused this on specific runtimes"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if (IPAddress.TryParse(host, out var ip)\n    && ip.AddressFamily != AddressFamily.InterNetwork\n    && ip.AddressFamily != AddressFamily.InterNetworkV6)\n    throw new ArgumentException(\"Host must be a hostname or IPv4/IPv6 literal.\", nameof(host));","typeGuard":"static bool IsSock5EncodableHost(string host) =>\n    !IPAddress.TryParse(host, out var ip)\n    || ip.AddressFamily is AddressFamily.InterNetwork or AddressFamily.InterNetworkV6;","tryCatchPattern":null,"preventionTips":["Pass plain hostnames rather than hand-built address strings","Normalize addresses through IPAddress/IPEndPoint parsing on a current runtime","Pin supported MailKit/runtime versions in CI"],"tags":["socks5","argument","ip-address"],"backgroundTag":"invalid-argument-value","analyzedSha":"9d3859a7855e3e17582c07fd01972b8e262bf176","analyzedAt":"2026-09-15T15:46:11.592Z","contentChangedAt":"2026-09-15T15:46:11.592Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}