Slow TCP endpoint resolution

近来连续两个项目用了 Boost.Asio,略微感受了以下异步IO的优势。

这两天遇到个问题:在建立TCP连接的时候,总是要耗费很长时间(4秒上下)才调用 handler 。

加了几行输出之后找到花费时间最多的函数调用是 boost::asio::ip::tcp::resolver::resolve() 。功能是从输入的IP、端口号(或服务名如 "http")解析出一系列用于连接的 endpoint 。

耗时长的原因我猜想是因为在国内多数ISP提供的网络里,解析IPv6的 endpoint 是办不到的。于是加限制,只解析IPv4 endpoint,果然解决问题。

修改前后的代码示例如下: