|
November 27th, 2013
izg0y | 01:06 am - Очередной ХЗ Странная штука... Чуток переделанный пример из MSDN. Надо было многопоточность.... Компилю в Visual Studio 2010. Если из проекта вычленить CRT то процесс не завершается ( хотя все API отрабатывают без ошибок ). После вызова getnameinfo появляется ещё 1 поток в процессе который никак не хочет завершаться и программа висит.
#include <winsock2.h> #include <ws2tcpip.h> #pragma comment(lib, "Ws2_32.lib") DWORD WINAPI GetIPInfo( LPVOID lpParam ) { DWORD dwRetval; char hostname[NI_MAXHOST]; char servInfo[NI_MAXSERV]; struct sockaddr_in* IP = (struct sockaddr_in*)lpParam ; dwRetval = getnameinfo((struct sockaddr *) IP, sizeof (struct sockaddr), hostname, NI_MAXHOST, servInfo, NI_MAXSERV, NI_NUMERICSERV); if (dwRetval != 0) { return 1; } else { WriteConsole( GetStdHandle( STD_OUTPUT_HANDLE ), hostname, strlen( hostname ), 0, 0 ) ; return 0; } } int __cdecl main() { WSADATA wsaData = {0}; int iResult = 0; struct sockaddr_in saGNI; u_short port = 27015; iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); saGNI.sin_family = AF_INET; saGNI.sin_addr.s_addr = inet_addr( "192.168.0.1" ); saGNI.sin_port = htons(port); struct sockaddr_in* IP = (struct sockaddr_in*)HeapAlloc( GetProcessHeap(), 0, sizeof( struct sockaddr_in ) ) ; memcpy( IP, &saGNI, sizeof( struct sockaddr_in ) ); HANDLE hHandle = CreateThread( 0, 0, GetIPInfo, IP, 0, 0 ) ; WaitForSingleObject( hHandle, INFINITE ) ; return 0 ; }
Как можно без принудительного убийства процесса добиться корректного завершения работы?
P. S. > Проверял на Windows 7 x64 +all patch.
|
Reply
|
|
|
LJ.Rossia.org |