shutdown 함수(winsock.h)
종료 함수는 소켓에서 전송 또는 수신을 사용하지 않도록 설정합니다.
구문
int shutdown(
[in] SOCKET s,
[in] int how
);
매개 변수
[in] s
소켓을 식별하는 설명자입니다.
[in] how
더 이상 허용되지 않는 작업 유형을 설명하는 플래그입니다. 이 플래그에 사용할 수 있는 값은 Winsock2.h 헤더 파일에 나열됩니다.
값 | 의미 |
---|---|
|
수신 작업을 종료합니다. |
|
보내기 작업을 종료합니다. |
|
보내기 및 받기 작업을 모두 종료합니다. |
반환 값
오류가 발생하지 않으면 종료 는 0을 반환합니다. 그렇지 않으면 SOCKET_ERROR 값이 반환되고 WSAGetLastError를 호출하여 특정 오류 코드를 검색할 수 있습니다.
오류 코드 | 의미 |
---|---|
가상 회로가 시간 초과 또는 기타 오류로 인해 종료되었습니다. 더 이상 소켓을 사용할 수 없으므로 응용 프로그램이 소켓을 닫아야 합니다.
이 오류는 연결 지향 소켓에만 적용됩니다. |
|
가상 회로가 하드 또는 중단한 닫기를 실행하는 원격 쪽에서 재설정되었습니다. 더 이상 소켓을 사용할 수 없으므로 응용 프로그램이 소켓을 닫아야 합니다.
이 오류는 연결 지향 소켓에만 적용됩니다. |
|
차단 Windows Sockets 1.1 호출이 진행 중이거나 서비스 공급자가 여전히 콜백 함수를 처리하고 있습니다. | |
매개 변수가 유효하지 않거나 소켓 형식과 일치하지 않는 방법입니다 . 예를 들어 SD_SEND UNI_RECV 소켓 유형과 함께 사용됩니다. | |
네트워크 하위 시스템이 실패했습니다. | |
소켓이 연결되지 않았습니다. 이 오류는 연결 지향 소켓에만 적용됩니다. | |
참고 설명자가 소켓이 아닙니다.
|
|
이 함수를 사용하기 전에 성공적인 WSAStartup 호출이 발생해야 합니다. |
설명
종료 함수는 수신, 전송 또는 둘 다를 사용하지 않도록 설정하기 위해 모든 유형의 소켓에서 사용됩니다.
매개 변수가 SD_RECEIVE 경우 소켓의 recv 함수에 대한 후속 호출은 허용되지 않습니다. 이는 낮은 프로토콜 계층에 영향을 주지 않습니다. TCP 소켓의 경우 수신 대기 중인 소켓에 대기 중인 데이터가 여전히 있거나 이후에 데이터가 도착하는 경우 데이터를 사용자에게 전달할 수 없으므로 연결이 다시 설정됩니다. UDP 소켓의 경우 들어오는 데이터그램이 허용되고 큐에 대기됩니다. 어떤 경우에도 ICMP 오류 패킷이 생성되지 않습니다.
매개 변수가 SD_SEND 경우 send 함수에 대한 후속 호출은 허용되지 않습니다. TCP 소켓의 경우 수신자가 모든 데이터를 보내고 승인한 후 FIN이 전송됩니다.
SD_BOTH 방법을 설정하면 위에서 설명한 대로 송신과 수신을 모두 사용하지 않도록 설정합니다.
종료 함수는 소켓을 닫지 않습니다. closesocket이 호출될 때까지 소켓에 연결된 모든 리소스는 해제되지 않습니다.
모든 데이터가 닫히기 전에 연결된 소켓에서 전송되고 수신되도록 하려면 애플리케이션은 closesocket을 호출하기 전에 종료를 사용하여 연결을 닫아야 합니다. 원격 엔드가 모든 데이터를 보내고 정상 연결 끊기를 시작했음을 알리는 알림을 기다리는 한 메서드는 다음과 같이 WSAEventSelect 함수를 사용합니다.
- WSAEventSelect를 호출하여 FD_CLOSE 알림에 등록합니다.
- how=SD_SEND 사용하여 종료를 호출합니다.
- FD_CLOSE 받으면 함수가 성공적으로 완료되고 0바이트가 수신되었음을 나타내기 전까지 recv 또는 WSARecv 를 호출합니다. SOCKET_ERROR 반환되면 정상적인 연결 끊기를 사용할 수 없습니다.
- closesocket을 호출합니다.
- how=SD_SEND 사용하여 종료를 호출합니다.
- 함수가 성공으로 완료되고 0바이트가 수신되었음을 나타내기 전까지 recv 또는 WSARecv 를 호출합니다. SOCKET_ERROR 반환되면 정상적인 연결 끊기를 사용할 수 없습니다.
- closesocket을 호출합니다.
자세한 내용은 정상 종료, 느린 옵션 및 소켓 닫기 섹션을 참조하세요.
보내기, 받기 또는 둘 다를 사용하지 않도록 설정하기 위해 종료 함수가 호출되면 기존 소켓 연결에 대해 보내기 또는 받기를 다시 사용하도록 설정하는 방법이 없습니다.
애플리케이션이 종료된 후 소켓을 다시 사용할 수 있는 것에 의존해서는 안 됩니다. 특히 Windows 소켓 공급자는 종료된 소켓에서 의 연결 사용을 지원할 필요가 없습니다.
애플리케이션이 소켓을 다시 사용하려는 경우 dwFlags 매개 변수를 TF_REUSE_SOCKET 설정된 DisconnectEx 함수를 호출하여 소켓의 연결을 닫고 다시 사용할 소켓 핸들을 준비해야 합니다. DisconnectEx 요청이 완료되면 소켓 핸들을 AcceptEx 또는 ConnectEx 함수에 전달할 수 있습니다.
애플리케이션이 소켓을 다시 사용하려는 경우 dwFlags 매개 변수 집합과 함께 TF_DISCONNECT 및 TF_REUSE_SOCKET 사용하여 모든 데이터가 전송을 위해 큐에 대기하고 소켓 핸들을 다시 사용할 수 있도록 준비한 후 연결을 끊을 수 있습니다. TransmitFile 요청이 완료되면 소켓 핸들을 이전에 AcceptEx 또는 ConnectEx와 같은 연결을 설정하는 데 사용된 함수 호출에 전달할 수 있습니다. TransmitPackets 함수가 완료되면 소켓 핸들을 AcceptEx 함수에 전달할 수 있습니다.
ATM에 대한 참고 사항
ATM(비동기 전송 모드) 및 Windows 소켓 2를 사용할 때 연결 해제와 관련된 중요한 문제가 있습니다. 이러한 중요한 고려 사항에 대한 자세한 내용은 closesocket 함수 참조의 주의 섹션에서 ATM에 대한 참고 섹션을 참조하세요.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, Webhost.h 포함) |
라이브러리 | Ws2_32.lib |
DLL | Ws2_32.dll |