gethostbyname() и getaddrinfo() навсегда блокируются (Linux)

#c #linux #sockets

Вопрос:

Я портирую свой код с Windows на Linux и застрял на проблеме: любой вызов gethostbyname() или getaddrinfo() блокируется навсегда.

 struct hostent* hEnt;
hEnt = gethostbyname( "www.google.com" );
 

или

 struct addrinfo hints;
struct addrinfo* ai;
int                 retVal;

memset( amp;hints, 0, sizeof( struct addrinfo ) );
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
hints.ai_protocol = 0;
hints.ai_canonname = NULL;
hints.ai_addr = NULL;
hints.ai_next = NULL;

retVal = getaddrinfo( "www.google.com", NULL, amp;hints, amp;ai );
 

пинг www.google.com работает просто отлично. Добавление www.google.com в /etc/hosts не очень помогает, так что это не сетевая проблема.

Я тестирую Debian 11 под управлением Hyper-V.

Любые предложения будут высоко оценены!

Комментарии:

1. На странице руководства написано: «Функции gethostbyname*(), gethostbyaddr*(), herror () и hstrerror() устарели. Приложения должны использовать getaddrinfo(3), getnameinfo(3) и gai_strerror(3) вместо этого».

2. Да, getaddrinfo () — это то, что я попробовал в первую очередь. Тоже не повезло.

3. Ну, независимо от результата, вы не должны использовать устаревший API, так что, может быть, покажите свою getaddrinfo() попытку?

4. Как показано, оба предоставленных вами фрагмента кода должны были сработать. Кроме того, ping называет getaddrinfo себя, так что что-то вроде них действительно работает. Проблема должна быть в какой-то другой части программы. Пожалуйста, предоставьте полную программу , которая блокирует навсегда.