getaddrinfo () возвращает ошибку «Запрошенное имя допустимо, но данные запрошенного типа не найдены».

0

Я использую getaddrinfo в своей примерной программе, чтобы перевести имя хоста на адрес. Но он не работает с этой ошибкой "Запрашиваемое имя действительно, но никаких данных запрашиваемого типа не найдено".

Образец кода:

struct addrinfo hints, *save_res= 0, *res= 0;
int gai_rc;
char host[] = "localhost";
char port[] = "3333";

/* set hints for getaddrinfo */
ZeroMemory( &hints, sizeof(hints) );
hints.ai_protocol= IPPROTO_TCP; /* TCP connections only */
hints.ai_family= AF_UNSPEC;     /* includes: IPv4, IPv6 or hostname */
hints.ai_socktype= SOCK_STREAM;
/* Get the address information for the server using getaddrinfo() */
gai_rc= getaddrinfo(host, port, &hints, &res);
if (gai_rc != 0)
{
    printf("getaddrinfo failed with error: %d - %s\n", gai_rc, gai_strerrorA(gai_rc));
    return false;
}
printf("success");

Из документации MSDN: WSANO_DATA 11004 Допустимое имя, нет данных о запрошенном типе. Запрошенное имя является допустимым и было найдено в базе данных, но для него не установлены соответствующие связанные данные. Обычный пример для этого - попытка перевода имени узла в адрес (с использованием gethostbyname или WSAAsyncGetHostByName), которая использует DNS (Domain Name Server). Запись MX возвращается, но нет записи A, указывающей, что сам хост существует, но недоступен непосредственно.

Может кто-нибудь, пожалуйста, предположите, почему он дает эту ошибку для locahost. Я не могу понять, в чем проблема.

Теги:
sockets

1 ответ

0

У меня была такая же проблема, попробуйте удалить:

hints.ai_protocol= IPPROTO_TCP; 

это не повлияет на желаемые результаты, поскольку:

hints.ai_socktype= SOCK_STREAM;

говорит ему выбирать только tcp-соединения. Возможно, вы также можете использовать только первый, но я не проверял его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню