问题标签 [getaddrinfo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
720 浏览

c - 与 sqlite3 链接时,getaddrinfo 永远卡住

我有一个需要 DNS 查询和 sqlite3 数据库连接的程序。我已经确定它在getaddrinfo()通话中无限期挂起。所以我nslookup.c只用这个调用创建了一个测试程序(来自busybox的)。当我不链接时,libsqlite3它按预期工作。代码段如下:

我只能在输出中看到“BEFORE GETADDRINFO”。我也尝试过跟踪程序。(我的 dns 服务器是 192.168.11.11,并查询“www.google.com”)这是它暂停的地方:

我的编译器是bfin-linux-uclibc-gcc(gcc 版本 4.1.2)我为bfin-linux-uclibc(版本 3.6.23)交叉编译了 sqlite3

我感谢任何评论、帮助、调试程序建议。

输出strace -e trace=file mybinary

的输出bfin-linux-uclibc-nm -g mybinary

0 投票
3 回答
3310 浏览

c - 无法使用 getaddrinfo() 连接到主机

注意:这是一个家庭作业项目,我将尝试编写剩余的代码,但无法弄清楚为什么无法连接到输入 URL。

我得到了骨架代码,我对其进行了一些修改以接收输入 URL。预期用途可能是:./a.out http://google.com

无论出于何种原因,它永远无法成功连接。始终打印错误消息“无法连接”。稍后我需要从 URL 中获取一个文件并将其保存到本地目录,但我会尝试弄清楚如何做到这一点(我的猜测是它与recv()下面的代码有关)。在“ http://google.com ”的情况下,我应该使用“index.html”。

骨架代码正在使用,但使用connect()的手册页似乎要快得多,但也不起作用。使用它似乎永远不会离开 for 循环(编辑:它永远不会离开,因为它似乎被卡住试图连接):getaddrinfo()bind()connect()

编辑:我替换"8080""80"Uku Loskit 推荐的。

0 投票
4 回答
6275 浏览

sockets - 如何处理 getaddrinfo 和线程安全?

我正在将 getaddrinfo 用于与 IPv6 相关的 C 项目。我电脑上的“man getaddrinfo”(uname -a: 3.5.0-23)只表示它是“可重入的”。所以我猜它不是线程安全的。

在需要线程安全的场景下,如何处理?我还检查了 UNP,但似乎没有提供具体答案。非常感谢。

0 投票
1 回答
4150 浏览

c++ - getaddrinfo,我没有得到任何规范名称

我正在尝试阅读有关特定主机的所有信息并打印出所有信息。我可以阅读并打印出所有地址,但我没有阅读任何 ai_canonname!

首先,我认为我的示例(www.google.com|www.irs.gov|...)没有佳能名称,但过了一会儿我想我根本没有任何名称。你认为我做错了什么还是你有一个可行的例子?

这是我的代码,

0 投票
2 回答
170 浏览

c - 如何让 getaddrinfo 只返回一个结果?

我想使用 getaddrinfo() 但只得到第一个结果。

更具体地说,我希望该函数首先扫描主机文件并获取找到的第一个结果,并且只有在未在主机中找到时才想查询 dns 服务器。

是否可以?

谢谢。

0 投票
3 回答
109 浏览

ipv6 - 为什么需要 addrinfo 循环?

假设我们有一个纯 IPv6 网络。套接字应用程序使用 getaddrinfo 通过其主机名查找 HOST1,并获取 HOST1 的一个 IP 地址作为第一个响应。为什么要在返回的地址上循环?路由器或 HOST1 的 TCP/IP 堆栈或本地 TCP/IP 堆栈是否有责任寻找到 HOST1 的备用路由,也许通过 HOST1 上的不同网络接口?

您可能会认为查找到名称已知的主机的路由是计算机网络基础设施的最基本功能,而不是套接字应用程序。

0 投票
3 回答
263 浏览

c++ - c++ getaddrinfo 不处理大 URL

C++ 套接字。从网站获取信息。

我正在尝试使用套接字从网络读取内容。使用以下代码。

该代码适用于“www.yahoo.com”、“www.google.com”等网址,但不适用于“www.google.com/nexus”等网址。

任何带有“/”的 URL 都不适用于此代码。我错过了什么吗?

0 投票
1 回答
4890 浏览

c++ - 如何使用“getaddrinfo”为所有接口选择默认空闲端口?

我正在尝试让服务器在双堆栈模式下同时监听 IPv4 和 IPv6。

我希望 IPv4 和 IPv6 服务器具有相同的端口号,并且我希望它位于随机选择的端口上(使用端口“0”)

当我绑定时,每台服务器都有不同的端口,我希望它是一样的。

所以我认为应该由 getaddrinfo 函数来完成。

但是当我给它“0”端口时,它在 addrinfo 结果中保持“0”,是什么导致每个绑定给我不同的端口号。

我的问题:有没有办法告诉 getaddrinfo 选择一个在所有接口上都可用的空闲端口,然后将给定地址绑定到所有接口?

如果没有,还有其他方法可以找到空闲端口号吗?(不绑定,失败时停止)

请参考以下代码:

编辑:现在代码可以在 VS 10 上完全编译。

EDIT2:我现在的解决方案:

我添加了以下函数,以便在首次成功绑定后调用,并将给定端口设置为 addrinfo 列表:

绑定成功后应该调用它:

0 投票
1 回答
155 浏览

c - getaddrinfo 不适用于网络地址

我有一个网络地址,例如 - 192.168.74.0/24。尝试使用 getaddrinfo 进行网络地址转换,似乎不起作用。这里的名字是 192.168.74.0/24。getaddrindo 的返回值为 -2。适用于没有前缀的 ipv4 地址。

0 投票
1 回答
2260 浏览

linux - Linux平台getaddrinfo()函数调用问题

最近,我正在开发基于Linux平台(2.6.32)的网络应用程序。我的场景是设备需要定期向服务器发送数据。每次网络代码首先调用函数 getaddinfo() 时,它都会返回服务器 IP 地址,然后我将此值传递给套接字接口或 libcurl api。

但是,我发现如果 /etc/resolv.conf 设置为无效值,例如 nameserver 169.254.1.1,getaddrinfo() 将返回错误值(-3)。即使我将 /etc/resolv.conf 更新为有效值, getaddrinfo() 仍然返回错误。

似乎 getaddrinfo() 函数在第一次调用后不会更新名称服务器值。

我的解决方案是在独立进程(不是线程)中调用 getaddrinfo() 。我发现这是解决上述问题的可行方法。

上述问题的根本原因是什么?