Winsock 连接很慢

Winsock connect is slow

我有一个程序使用 Boost.Asio 连接到本地主机上的服务器。这是代码的相关部分:

TcpClient::TcpClient(uint16_t port_number) : socket_(service_)
{
    boost::asio::ip::tcp::resolver resolver(service_);
    boost::asio::ip::tcp::resolver::query resolver_query("localhost", std::to_string(port_number));
    auto endpoint_iterator = resolver.resolve(resolver_query);
    boost::asio::connect(socket_, endpoint_iterator);
}

代码运行良好。在 Ubuntu 上,connect 几乎立即发挥作用 returns。但是,在 Windows 上需要 2 多秒才能完成。

单步执行 boost 代码,我发现 2 秒花在了 Winsock connect 函数调用上。

我是否遗漏了一些可以加快此调用速度的东西(在代码中或在环境中)?

谢谢!

如果您启用了 IPv6,那么 resolver_query("localhost", std::to_string(port_number)); 将 return 一个 IPv4 和 IPv6 地址(根据首先列出的 IPv6 的经验)。如果您的服务器没有侦听 IPv6,那么 boost::asio::connect 将首先尝试 IPv6,等待它失败,然后再尝试 IPv4。

要么让你的服务器监听 IPv6,使用“127.0.0.1”代替本地主机,要么将解析器限制为仅 return IPv4:

resolver_query(boost::asio::ip::tcp::v4(), "localhost", std::to_string(port_number));