내 프로그램에서 소켓을 사용하고 있습니다. 나는 WSAStartup
을 추가했기 때문에. 내 응용 프로그램이 정상적으로 실행됩니다 (항상 신호가 멈출 때까지입니다). 신호를 받고 나면 내 프로그램 끝 부분에 WSACleanup
함수를 쓰면 충돌이 발생하고 제거하면 문제가 없어집니다.Windows 소켓 WSACleanup C++
감사합니다.
내 프로그램에서 소켓을 사용하고 있습니다. 나는 WSAStartup
을 추가했기 때문에. 내 응용 프로그램이 정상적으로 실행됩니다 (항상 신호가 멈출 때까지입니다). 신호를 받고 나면 내 프로그램 끝 부분에 WSACleanup
함수를 쓰면 충돌이 발생하고 제거하면 문제가 없어집니다.Windows 소켓 WSACleanup C++
감사합니다.
다시 검색하고 문제를 찾을 수 없습니다. 응용 프로그램은 단순한 소켓 이상의 것을 사용하고 있습니다. Microsoft가 WSACleanup을 사용해야한다는 WSAStartup에 대해 언급하고 있지만, 사실이 아니므로 시스템에서는이를 릴리스하고 있습니다.
이것은 내 프로젝트에서 발췌 한 것입니다.
초기화 :
#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
희망.
문제가되지 않습니다. directlry 소켓을 사용하지 않고 소켓에서 선택을 사용하고 있습니다. –
나는 그것에 어떤 문제도 보지 않는다. Win의 경우 WSACleanup을 호출해야합니다. BTW, 쓰레드를 사용하고 있습니까? –
또한, 나는 당신을 위해 멋진 Windows 소켓 API 레퍼런스를 발견했다 - http://www.sockets.com/winsock.htm#Cleanup. –