无效地址上的 boost::asio::ip::address::from_string 没有抛出异常

Jiv*_*nov 2 c++ boost-asio

有谁知道为什么:

boost::system::error_code ec;
boost::asio::ip::address const addr =
   boost::asio::ip::address::from_string("10.10.10", ec);
Run Code Online (Sandbox Code Playgroud)

不返回错误,因为 10.10.10 是无效地址?

而不是这个 10.10.10 在 addr 中修改为 10.10.0.10 并且没有抛出异常?

Wum*_*Wum 5

boost::asio::ip::address::from_string()依赖于inet_pton()内部,它接受像 10.10.10 这样的东西作为有效地址。字符串“10.10”用于两个顶部八位字节。剩余的“10”被解释为 16 位数字,并拆分为最后两个八位字节。总而言之,这被正确解释为 10.10.0.10 。

此外,您的调用boost::asio::ip::address::from_string("10.10.10", ec);不会抛出,因为它使用boost::system::error_code.

  • 据我所知,这背后的想法是在处理 IP 范围/增加 IP 时简化使用。想象一下,从 192.168.0 ... 192.168.255 开始,实际上会导致 192.168.0.0 ... 192.168.0.255 的范围。下一个增量值为 192.168.256 ,结果为 192.168.1.0 。 (2认同)