Всем привет.
Делаю запросы к своему домену из приложения на C++.
Запросы делаются с помощью функций из WinInet.h, то есть
InternetOpen -> InternetConnect -> HttpOpenRequest -> HttpSendRequest
Заметил, что у одних людей запросы выполняются моментально, у других очень долго (порядка 20-30 секунд на запрос). Выяснил, что дело в том, какой адрес ресолвится. Если это ipv6, то все медленно. Если я на машине, где ресолвится ipv6 адрес руками прописываю в hosts ipv4 адрес домена, то все начинает работает очень быстро.
Я честно гуглил, но не нашел ничего похожего.
Вот фрагмент кода:
hInet = InternetOpen(string("MyApp/" + AppVersionAsString).c_str(), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (!hInet) return false;
hConn = InternetConnect(hInet, appDomain.c_str(), 80, NULL, NULL, INTERNET_SERVICE_HTTP, 0, dwContext);
if (!hConn) return false;
DWORD dwFlags = INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_NO_UI | INTERNET_FLAG_PRAGMA_NOCACHE;
hReq = HttpOpenRequest(hConn, "POST", path.c_str(), "HTTP/1.1", NULL, rgpszAcceptTypes, dwFlags, dwContext);
DWORD connectTimeout = 5000;
InternetSetOption(hReq, INTERNET_OPTION_CONNECT_TIMEOUT, &connectTimeout, sizeof(connectTimeout));
bSuccess = HttpSendRequest(hReq, headers.c_str(), headers.length(), (LPVOID)PostData.c_str(), PostData.size());
добавлю: тормозит только первый запрос. Последующие выполняются быстро даже на ipv6