【发布时间】:2020-01-08 12:33:15
【问题描述】:
我们目前正在使用 Oat++ (https://oatpp.io/) 作为嵌入式项目的网络服务器。 它在以下几个环境中运行良好:docker 容器、ubuntu VM、Raspberry Pi 3。
但是,对于这个项目,我们使用 Yocto (https://www.yoctoproject.org/) 构建了自己的 linux 发行版,经过一些调试,我们意识到 getaddrinfo (http://man7.org/linux/man-pages/man3/getaddrinfo.3.html) 功能不起作用。
这是正在发生的事情的示例代码:
struct addrinfo *result = NULL;
struct addrinfo hints;
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;
int iResult = getaddrinfo(NULL, "8080", &hints, &result);
// iResult == EAI_ADDRFAMILY
有人知道可能是什么问题吗?
PS:我们尝试将内核配置与 Raspberry Pi 3 中的内核配置进行比较,但没有成功 PSS:我们也试过设置IP(即:getaddrinfo("192.168.1.10", "8080", &hints, &result)),同样没有成功
【问题讨论】:
-
你使用的是 glibc 还是 musl?
-
您好@ThmX,据我了解,您在谈论 oatpp 客户端连接提供程序。在早期,它使用
gethostbyname方法而不是getaddrinfo,如果您可以选择 - 尝试使用它。我不知道它是否适用于 Yocto,但根据互联网上的信息碎片它应该。请参阅客户端连接提供程序的上一版本 - github.com/oatpp/oatpp/blob/… -
除了仔细检查实际的网络配置(例如,它真的是 IPv4 吗?)我唯一能想到的就是“提示”结构初始化:您应该将其初始化为零。
标签: linux embedded embedded-linux yocto getaddrinfo