я пытаюсь подтвердить, что описанная здесь функция:
http://msdn.microsoft.com/en-us/library/aa384066(VS.85).aspx
WINHTTP_OPTION_CONNECT_RETRIES Устанавливает или
извлекает целое число без знака
значение, которое содержит количество
раз WinHTTP пытается подключиться к
хост. HTTP-сервисы Microsoft Windows
(WinHTTP) только попытки один раз за
Интернет-протокол (IP) адрес. За
Например, если вы пытаетесь подключиться к
многосетевой хост с 10 IP
адреса и
WINHTTP_OPTION_CONNECT_RETRIES установлен
до 7, то WinHTTP только пытается
подключиться к первым семи IP-адресам.
Учитывая тот же набор из 10 IP-адресов,
если WINHTTP_OPTION_CONNECT_RETRIES
установить 20, WinHTTP пытается каждый из
10 только один раз. Если соединение
попытка все еще терпит неудачу после
указанное количество попыток, или если
истекло время ожидания подключения
затем запрос отменяется.
значение по умолчанию для
WINHTTP_OPTION_CONNECT_RETRIES - пять
попытки.
на самом деле работает.
мой код:
int main()
{
DWORD dwDownloaded = 0;
LPSTR pszOutBuffer;
BOOL bResults = FALSE;
HINTERNET hSession = NULL,
hConnect = NULL,
hRequest = NULL;
// Use WinHttpOpen to obtain a session handle.
hSession = WinHttpOpen( L"WinHTTP Example/1.0",
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS, 0 );
DWORD data;
DWORD dwSize = sizeof(DWORD);
if (hSession)
{
// Use WinHttpQueryOption to retrieve internet options.
if (WinHttpQueryOption( hSession,
WINHTTP_OPTION_CONNECT_RETRIES,
&data, &dwSize))
{
printf("Connection Retries: %u \n\n",data);
}
else
{
printf( "Error %u in WinHttpQueryOption.\n", GetLastError());
}
}
else
{
printf("Error %u in WinHttpOpen.\n", GetLastError());
}
dwSize = 0;
// Specify an HTTP server.
if( hSession )
hConnect = WinHttpConnect( hSession, L"google.com",
INTERNET_DEFAULT_HTTP_PORT, 0 );
// Create an HTTP request handle.
if( hConnect )
hRequest = WinHttpOpenRequest( hConnect, L"GET", NULL,
NULL, WINHTTP_NO_REFERER,
NULL,
NULL );
// Send a request.
if( hRequest )
bResults = WinHttpSendRequest( hRequest,
WINHTTP_NO_ADDITIONAL_HEADERS, 0,
WINHTTP_NO_REQUEST_DATA, 0,
0, 0 );
// End the request.
if( bResults )
bResults = WinHttpReceiveResponse( hRequest, NULL );
// Keep checking for data until there is nothing left.
if( bResults )
{
do
{
// Check for available data.
dwSize = 0;
if( !WinHttpQueryDataAvailable( hRequest, &dwSize ) )
printf( "Error %u in WinHttpQueryDataAvailable.\n",
GetLastError( ) );
// Allocate space for the buffer.
pszOutBuffer = new char[dwSize+1];
if( !pszOutBuffer )
{
printf( "Out of memory\n" );
dwSize=0;
}
else
{
// Read the data.
ZeroMemory( pszOutBuffer, dwSize+1 );
if( !WinHttpReadData( hRequest, (LPVOID)pszOutBuffer,
dwSize, &dwDownloaded ) )
printf( "Error %u in WinHttpReadData.\n", GetLastError( ) );
else
printf( "%s", pszOutBuffer );
// Free the memory allocated to the buffer.
delete [] pszOutBuffer;
}
} while( dwSize > 0 );
}
// Report any errors.
if( !bResults )
printf( "Error %d has occurred.\n", GetLastError( ) );
// Close any open handles.
if( hRequest ) WinHttpCloseHandle( hRequest );
if( hConnect ) WinHttpCloseHandle( hConnect );
if( hSession ) WinHttpCloseHandle( hSession );
getchar();
return 0;
}
Один из способов проверить это - поместить его в файл C: \ WINDOWS \ system32 \ drivers \ etc \ hosts:
123.123.123.123 google.com
66.102.7.99 google.com
тип
ping google.com
(это должно провалиться)
тогда
ipconfig /displaydns
и вы должны увидеть две записи DNS для google.com.
, как указано выше, значение по умолчанию равно 5, что означает, что он должен попробовать второй IP, но это не так. что мне не хватает?