getaddrinfo возвращает EAI_ADDRFAMILY для дистрибутива, созданного с помощью Yocto - PullRequest
4 голосов
/ 08 января 2020

В настоящее время мы используем Oat ++ (https://oatpp.io/) в качестве веб-сервера для встроенного проекта. Это прекрасно работает с несколькими средами: docker контейнер, Ubuntu VM, Raspberry Pi 3.

Однако для этого проекта у нас есть собственный дистрибутив linux, построенный с использованием Yocto (https://www.yoctoproject.org/) и после некоторой отладки мы понимаем, что функция 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)), также безуспешно

1 Ответ

1 голос
/ 15 января 2020

Ну, мы обнаружили, что проблема не в getaddrinfo ... Извините за это.

Проблема была в IPv6 (реализация SimpleTCPConnectionProvider для linux использует только INET6) и нашей системе построен только с IPv4.

Поэтому я создал свой собственный ServerConnectionProvider, который реализует сокет с INET вместо INET6.

...