gpt4 book ai didi

c++ - 来自维基百科的 GetAddrInfo 示例将不起作用

转载 作者:太空狗 更新时间:2023-10-29 23:17:07 25 4
gpt4 key购买 nike

我最近一直在学习如何使用 getaddrinfo()。我以维基百科为例: http://en.wikipedia.org/wiki/Getaddrinfo
我对示例代码做了一些小修改,以便使用 Visual C++ 2005 对其进行编译。
修改后的版本如下:

int main(){

// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);

if (iResult != 0) {
printf("WSAStartup failed with error: %d\n", iResult);
return 1;
}

struct addrinfo *res;
int error;

/* resolve the domain name into a list of addresses */
error = getaddrinfo("www.example.com", NULL, NULL, &result);
if (error != 0)
{
fprintf(stderr, "%d\n", error);
fprintf(stderr, "error in getaddrinfo: %s\n", gai_strerror(error));

exit(EXIT_FAILURE);
}

/* loop over all returned results and do inverse lookup */
for (res = result; res != NULL; res = res->ai_next)
{
char hostname[NI_MAXHOST] = "";

error = getnameinfo(res->ai_addr, res->ai_addrlen, hostname, NI_MAXHOST, NULL, 0, 0);
if (error != 0)
{
fprintf(stderr, "%d\n", WSAGetLastError());
fprintf(stderr, "error in getnameinfo: %s\n", gai_strerror(error));
continue;
}
if (*hostname != '\0')
printf("hostname: %s\n", hostname);
}

freeaddrinfo(result);

getchar();

return 0;
}

执行结果意外失败,返回错误:WSANO_DATA。不过,我可以使用 Google Chrome 连接到 www.example.com
我还将代码中的 www.example.com 替换为其他域名并进行了测试。有些结果在意料之中,有些结果很奇怪:

test: localhost
hostname: localhost

test: www.yahoo.com.tw
hostname: w2.rc.vip.gq1.yahoo.com
hostname: w2.rc.vip.sp1.yahoo.com

第一个结果符合预期,但第二个(www.yahoo.com.tw)很奇怪。我无法通过浏览器连接到“w2.rc.vip.gq1.yahoo.com”和“w2.rc.vip.sp1.yahoo.com”。

谁能解释为什么我得到上述结果以及为什么来自维基百科的原始示例不起作用?非常感谢。

最佳答案

示例和您的代码运行良好。

直接连接到 Yahoo 的负载均衡器地址应该不起作用,因为它意味着将您的请求转发到基于域、子域和路由的前端交付服务器。

您可以在 wiki 上找到更多关于 Load balancing 的信息及其工作原理。

至于错误,请尝试在重新测试之前刷新您的 DNS 缓存。可以在 Windows 上使用 ipconfig/flushdns 来完成。

关于c++ - 来自维基百科的 GetAddrInfo 示例将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20213150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com