다음을 통해 공유


WSACleanup 함수(winsock.h)

WSACleanup 함수는 Winsock 2 DLL(Ws2_32.dll)의 사용을 종료합니다.

구문

int WSACleanup();

반환 값

작업이 성공한 경우 반환 값은 0입니다. 그렇지 않으면 SOCKET_ERROR 값이 반환되고 WSAGetLastError를 호출하여 특정 오류 번호를 검색할 수 있습니다.

다중 스레드 환경에서 WSACleanup 은 모든 스레드에 대한 Windows 소켓 작업을 종료합니다.

오류 코드 의미
WSANOTINITIALISED
이 함수를 사용하기 전에 성공적인 WSAStartup 호출이 발생해야 합니다.
WSAENETDOWN
네트워크 하위 시스템이 실패했습니다.
WSAEINPROGRESS
차단 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 언로드되는 경우 보류 중인 데이터가 손실될 수 있습니다. 보류 중인 모든 데이터가 전송되도록 하려면 애플리케이션이 종료 를 사용하여 연결을 닫은 다음 closesocketWSACleanup을 호출하기 전에 닫기가 완료될 때까지 기다려야 합니다. 대기 중이거나 게시된 메시지와 같은 모든 리소스 및 내부 상태는 다음 사용자가 사용할 수 있도록 할당을 취소해야 합니다.

WSAStartup을 성공적으로 호출할 때마다 WSACleanup에 대한 호출이 있어야 합니다. 최종 WSACleanup 함수 호출만 실제 정리를 수행합니다. 앞의 호출은 단순히 WS2_32.DLL 내부 참조 수를 감소합니다.

참고WSACleanup 은 PNRP(피어 이름 확인 프로토콜) 네임스페이스 공급자와 같은 Windows 소켓 네임스페이스 공급자에 등록되었을 수 있는 이름(예: 피어 이름)을 등록 취소하지 않습니다.
 
Windows Sockets 1.1에서는 차단 후크 내에서 WSACleanup을 호출한 다음 반환 코드를 검사 못하는 것이 일반적인 프로그래밍 오류였습니다. 차단 호출이 처리 중인 동안 Winsock 1.1 애플리케이션을 종료해야 하는 경우 애플리케이션은 먼저 WSACancelBlockingCall 을 사용하여 차단 호출을 취소한 다음, 컨트롤이 애플리케이션에 반환되면 WSACleanup 호출을 실행해야 합니다. Windows 소켓 2에서는 이 문제가 존재하지 않으며 WSACancelBlockingCall 함수가 제거되었습니다.

WSACleanup 함수는 일반적으로 프로토콜별 도우미 DLL이 언로드됩니다. 따라서 애플리케이션 DLL의 DllMain 함수에서 WSACleanup 함수를 호출하면 안 됩니다. 이로 인해 교착 상태가 발생할 수 있습니다. 자세한 내용은 DLL Main 함수를 참조하세요.

Windows Phone 8: 이 함수는 Windows Phone 8 이상에서 Windows Phone 스토어 앱에서 지원됩니다.

Windows 8.1Windows 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

추가 정보

PNRP 네임스페이스 공급자 API

WSAStartup

Winsock 함수

Winsock 참조

closesocket

shutdown