DNS-запрос с WinSock не удается - PullRequest
       22

DNS-запрос с WinSock не удается

0 голосов
/ 12 февраля 2020

Я понимаю, что у winsock есть gethostbyname для этого. Но мне нужно отладить для встроенного приложения, и сначала я пробую код на Windows. Вот мой код: Hide Expand Copy Code

sockaddr_in dns_addr;
int dns_size = sizeof(dns_addr);
ZeroMemory(&dns_addr, dns_size);
dns_addr.sin_family = AF_INET;
dns_addr.sin_port = htons(53);
dns_addr.sin_addr.s_addr = inet_addr("8.8.8.8");

SOCKET out = socket(AF_INET, SOCK_DGRAM, 0);

char msg[] = {
    0x12, 0x34,         // ID
    0x01, 0x00,         // QR ... RCODE
    0x00, 0x01,         // QDCOUNT
    0x00, 0x00,         // ANCOUNT
    0x00, 0x00,         // NSCOUNT
    0x00, 0x00,         // ARCOUNT
    0x03,
    0x77, 0x77, 0x77,       // www
    0x03,
    0x74, 0x75, 0x74,       // tut
    0x02,
    0x62, 0x79,         // by
    0x00,
    0x00, 0x01,         // TYPE_A
    0x00, 0x01          // CLASS_IN
};
int msg_size = sizeof(msg);
int iSendOk = sendto(out, msg, msg_size, 0, (sockaddr*)&dns_addr, dns_size);

if (iSendOk != SOCKET_ERROR)
{
    char bufstr[100];
    sockaddr_in dest_addr;
    int dest_addr_size = sizeof(dest_addr);
    int iReceived = recvfrom(out, bufstr, 100, 0,(sockaddr*)&dest_addr, &dest_addr_size);
}

closesocket(out);

И этот код зависает при выполнении функции recvfrom. Функция выполняется с бесконечным l oop и никогда не возвращается. Что я делаю не так?

...