WSACleanup 함수(winsock.h)
WSACleanup 함수는 Winsock 2 DLL(Ws2_32.dll)의 사용을 종료합니다.
구문
int WSACleanup();
반환 값
작업이 성공한 경우 반환 값은 0입니다. 그렇지 않으면 SOCKET_ERROR 값이 반환되고 WSAGetLastError를 호출하여 특정 오류 번호를 검색할 수 있습니다.
다중 스레드 환경에서 WSACleanup 은 모든 스레드에 대한 Windows 소켓 작업을 종료합니다.
오류 코드 | 의미 |
---|---|
이 함수를 사용하기 전에 성공적인 WSAStartup 호출이 발생해야 합니다. | |
네트워크 하위 시스템이 실패했습니다. | |
차단 Windows Sockets 1.1 호출이 진행 중이거나 서비스 공급자가 여전히 콜백 함수를 처리하고 있습니다. |
설명
Windows 소켓 서비스를 사용하려면 WSAStartup 호출을 성공적으로 수행하려면 애플리케이션 또는 DLL이 필요합니다. Windows 소켓 사용을 완료한 경우 애플리케이션 또는 DLL은 WSACleanup 을 호출하여 Windows 소켓 구현에서 자체 등록을 취소하고 구현이 애플리케이션 또는 DLL을 대신하여 할당된 리소스를 해제할 수 있도록 허용해야 합니다.
WSACleanup이 호출되면 이 프로세스의 스레드에서 발급한 보류 중인 차단 또는 비동기 Windows 소켓 호출은 알림 메시지를 게시하거나 이벤트 개체에 신호를 표시하지 않고 취소됩니다. 이 프로세스의 스레드에서 발급한 보류 중인 겹치는 송신 또는 수신 작업(예를 들어 겹치는 소켓이 있는 WSASend, WSASendTo, WSARecv 또는 WSARecvFrom )도 이벤트 개체를 설정하거나 완료 루틴을 호출하지 않고도 취소됩니다( 지정된 경우). 이 경우 보류 중인 겹치는 작업이 오류 상태 WSA_OPERATION_ABORTED 실패합니다.
WSACleanup이 호출될 때 열린 소켓은 다시 설정되고 closesocket이 호출된 것처럼 자동으로 할당이 취소됩니다. closesocket으로 닫혔지만 여전히 전송할 보류 중인 데이터가 있는 소켓은 WSACleanup이 호출될 때 영향을 받을 수 있습니다. 이 경우 애플리케이션이 종료될 때 메모리에서 WS2_32.DLL 언로드되는 경우 보류 중인 데이터가 손실될 수 있습니다. 보류 중인 모든 데이터가 전송되도록 하려면 애플리케이션이 종료 를 사용하여 연결을 닫은 다음 closesocket 및 WSACleanup을 호출하기 전에 닫기가 완료될 때까지 기다려야 합니다. 대기 중이거나 게시된 메시지와 같은 모든 리소스 및 내부 상태는 다음 사용자가 사용할 수 있도록 할당을 취소해야 합니다.
WSAStartup을 성공적으로 호출할 때마다 WSACleanup에 대한 호출이 있어야 합니다. 최종 WSACleanup 함수 호출만 실제 정리를 수행합니다. 앞의 호출은 단순히 WS2_32.DLL 내부 참조 수를 감소합니다.
WSACleanup 함수는 일반적으로 프로토콜별 도우미 DLL이 언로드됩니다. 따라서 애플리케이션 DLL의 DllMain 함수에서 WSACleanup 함수를 호출하면 안 됩니다. 이로 인해 교착 상태가 발생할 수 있습니다. 자세한 내용은 DLL Main 함수를 참조하세요.
Windows Phone 8: 이 함수는 Windows Phone 8 이상에서 Windows Phone 스토어 앱에서 지원됩니다.
Windows 8.1 및 Windows Server 2012 R2: 이 함수는 Windows 8.1, Windows Server 2012 R2 이상에서 Windows 스토어 앱에서 지원됩니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8.1, Windows Vista [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | winsock.h(Winsock2.h 포함) |
라이브러리 | Ws2_32.lib |
DLL | Ws2_32.dll |