Я пытаюсь разрешить имя хоста в C с помощью GetAddrInfoExW ()
struct addrinfoexW hints, *res;
int errcode;
void *ptr = 0;
ZeroMemory(&hints, sizeof(struct addrinfoexW));
hints.ai_family = PF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags |= AI_CANONNAME;
errcode = GetAddrInfoExW(
L"google.de", // pName
L"80", // pServiceName
NS_DNS, // dwNameSpace
NULL, // lpNspId
&hints, // hints
&res, // ppResult
NULL, // timeout
NULL, // lpOverlapped
NULL, // lpCompletionRoutine
NULL // lpHandle
);
if (errcode != 0)
{
//perror("getaddrinfo");
return -1;
}
... но при вызове GetAddrInfoEx всегда происходит сбой:
ntdll.dll!RtlAllocateHeap() Unbekannt
mswsock.dll!SockLoadTransportMapping() Unbekannt
mswsock.dll!SockGetTdiName() Unbekannt
mswsock.dll!SockSocket() Unbekannt
mswsock.dll!WSPSocket() Unbekannt
ws2_32.dll!WSASocketW() Unbekannt
ws2_32.dll!GetProtocolStateForFamily() Unbekannt
ws2_32.dll!GetAddrInfoExW() Unbekannt
Main.exe!lookup_host(const wchar_t * host, addrinfo * out) Zeile 112
Кажется, все значения, которые я передаю, верны. Я также пытался с GetAddrInfoEx и GetAddrInfo, как в Unicode, так и в Ansi. Трассировка стека также изменяется при каждом запуске.
Я также пытался использовать устаревшее gethostbyname, которое дает похожий результат ...
Решено: куча была повреждена из-за более раннего выделения, я думаю. Исправлено распределение места. Спасибо всем