izg0y - Post a comment

> Recent Entries
> Archive
> Friends
> User Info
> CoRU

November 27th, 2013


[info]izg0y01: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.

Read Comments

Reply


From:
(will be screened)
Identity URL: 
имя пользователя:    
Вы должны предварительно войти в LiveJournal.com
 
E-mail для ответов: 
Вы сможете оставлять комментарии, даже если не введете e-mail.
Но вы не сможете получать уведомления об ответах на ваши комментарии!
Внимание: на указанный адрес будет выслано подтверждение.
Username:
Password:
Subject:
No HTML allowed in subject
Message:



Notice! This user has turned on the option that logs your IP address when posting.

> Go to Top
LJ.Rossia.org