http://www.google.ru/search?hl=ru&source=hp&q=gethostbyname+async&aq=0&aqi=g1&aql=&oq=gethostbyname+as&gs_rfai= http://msdn.microsoft.com/en-us/library/ms741522(VS.85).aspx
AlexTheC0d3r, да именно это я и имел ввиду. W!z@rD, можно ссылку на пример использования WSAAsyncGetHostByName ?
Ок отыскал в сети код, подогнал его под себя, однако он не работает Вызываю таким образом Code: IAsyncHostName *pBaseSocket = new IAsyncHostName( ); pBaseSocket->AsyncGetHostByName( domain ); Sleep( 1000 ); struct hostent *hp = pBaseSocket->OnGetHostEnt( ); delete pBaseSocket; однако WSAAsyncGetHostByName возвращает число ее вызовов, то есть при каждом вызове результат увеличивается на 1 1, 2, 3 и т.д. а GetLastError() возвращает 0 Код в архиве на народе
Это не число вызовов, а идентификатор. А возрастает т.к. не закрываются предыдущие задания. Что возвращает AsyncGetHostByName ? Есть подозрение что тут нужно == вместо != Code: if (m_HostName.hTask != 0) { TRACE1("***** ERROR: WSAAsyncGetHostByName(%d) *****\n", GetLastError()); m_dwError = GetLastError(); return FALSE; } И тут поменять: Code: if (m_HostName.hTask == 0) { WSACancelAsyncRequest( m_HostName.hTask ); } > отыскал в сети код. Что за код, он рабочий?
Пока, что написал такой код: Code: struct hoststruct { char *domain; hostent *hp; }; // âòîðîé ïîòîê UINT HostThread(LPVOID pParam) { hoststruct *pHost = (hoststruct*)pParam; pHost->hp = gethostbyname(pHost->domain); return 0; } Вызываю так: Code: hoststruct *pHostInfo; ZeroMemory(pHostInfo, sizeof(hoststruct)); pHostInfo->domain = domain; CWinThread* PHostThread; PHostThread = AfxBeginThread(HostThread, pHostInfo, THREAD_PRIORITY_NORMAL, 0, 0 , NULL ); Sleep( 1000 ); TerminateThread(PHostThread->m_hThread, 0); struct hostent *hp = pHostInfo->hp; Вопрос такой, какие последствия могут быть от подобного использования кода ? Пока нашел 2 минуса. при убийстве потока через TerminateThread, задание gethostbyname остается жить и соответственно все новые задания встают в очередь и при большом количестве заданий gethostbyname просто не срабатывает
Да, не самое лучшее решение. Действительно, скорее всего будет забиваться очередь. Хотя имхо WSAAsyncGetHostByName это тоже своеобразный подход к решению проблемы. А что с тем классом-то не получилось?