我们目前正在使用Oat ++(https://oatpp.io/)作为嵌入式项目的Web服务器。在以下几种环境下工作是令人惊奇的: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)),但也没有成功
嗯,我们发现问题不在于getaddrinfo ...抱歉。
问题是由于IPv6(Linux的SimpleTCPConnectionProvider的实现仅使用INET6),而我们的系统仅使用IPv4构建。
因此,我创建了自己的ServerConnectionProvider,该实现使用INET而不是INET6实现套接字。