2009-10-01 4 views
0

내 프로그램에서 소켓을 사용하고 있습니다. 나는 WSAStartup을 추가했기 때문에. 내 응용 프로그램이 정상적으로 실행됩니다 (항상 신호가 멈출 때까지입니다). 신호를 받고 나면 내 프로그램 끝 부분에 WSACleanup 함수를 쓰면 충돌이 발생하고 제거하면 문제가 없어집니다.Windows 소켓 WSACleanup C++

감사합니다.

답변

1

다시 검색하고 문제를 찾을 수 없습니다. 응용 프로그램은 단순한 소켓 이상의 것을 사용하고 있습니다. Microsoft가 WSACleanup을 사용해야한다는 WSAStartup에 대해 언급하고 있지만, 사실이 아니므로 시스템에서는이를 릴리스하고 있습니다.

3

이것은 내 프로젝트에서 발췌 한 것입니다.

초기화 :

#if defined(WIN32) 
WSADATA wsaData; 
WORD wVersionRequested = MAKEWORD(2, 0); 
if (WSAStartup(wVersionRequested, &wsaData) != 0) { 
    LOG("WSAStartup() error"); 
    return false; 
} 
#endif 

serv_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); 

... 

정리 :이 도움이

#if defined(WIN32) 
    /* winsock requires a special function for sockets */ 
    shutdown(serv_socket, SD_BOTH); 
    closesocket(serv_socket); 
    /* clean up winsock */ 
    WSACleanup(); 
#else 
    close(serv_socket); 
#endif 

희망.

+0

문제가되지 않습니다. directlry 소켓을 사용하지 않고 소켓에서 선택을 사용하고 있습니다. –

+0

나는 그것에 어떤 문제도 보지 않는다. Win의 경우 WSACleanup을 호출해야합니다. BTW, 쓰레드를 사용하고 있습니까? –

+1

또한, 나는 당신을 위해 멋진 Windows 소켓 API 레퍼런스를 발견했다 - http://www.sockets.com/winsock.htm#Cleanup. –