다음을 통해 공유


PFN_WSK_CLOSE_SOCKET 콜백 함수(wsk.h)

WskCloseSocket 함수는 소켓을 닫고 연결된 리소스를 해제합니다.

구문

PFN_WSK_CLOSE_SOCKET PfnWskCloseSocket;

NTSTATUS PfnWskCloseSocket(
  [in]      PWSK_SOCKET Socket,
  [in, out] PIRP Irp
)
{...}

매개 변수

[in] Socket

닫히는 소켓의 소켓 개체를 지정하는 WSK_SOCKET 구조체에 대한 포인터입니다.

[in, out] Irp

WSK 하위 시스템이 닫기 작업을 비동기적으로 완료하는 데 사용하는 호출자 할당 IRP에 대한 포인터입니다. WSK 함수에서 IRP를 사용하는 방법에 대한 자세한 내용은 Winsock 커널 함수에서 IRP 사용을 참조하세요.

반환 값

WskCloseSocket 은 다음 NTSTATUS 코드 중 하나를 반환합니다.

반환 코드 설명
STATUS_SUCCESS
소켓이 성공적으로 닫혔습니다. IRP는 성공 상태 완료됩니다.
STATUS_PENDING
WSK 하위 시스템이 소켓을 즉시 닫을 수 없습니다. WSK 하위 시스템은 소켓을 닫은 후 IRP를 완료합니다. 닫기 작업의 상태 IRP의 IoStatus.Status 필드에 반환됩니다.
기타 상태 코드
오류가 발생했습니다. IRP는 실패 상태 완료됩니다.

설명

WskCloseSocket 함수를 호출하기 전에 WSK 애플리케이션은 애플리케이션의 다른 스레드에서 확장 함수를 포함하여 소켓의 함수에 대해 진행 중인 다른 함수 호출이 없는지 확인해야 합니다. 예를 들어 애플리케이션이 다른 스레드의 동일한 소켓에서 WskSend 를 호출하는 동안 WSK 애플리케이션은 한 스레드의 소켓에서 WskCloseSocket 을 호출해서는 안 됩니다. 소켓의 함수에 대한 진행 중인 호출은 WskCloseSocket 을 호출하여 소켓을 닫기 전에 컨트롤을 WSK 애플리케이션으로 다시 반환해야 합니다. 그러나 아직 완료되지 않은 소켓의 함수에 대한 이전 호출에서 보류 중인 IRP가 있는 경우 WSK 애플리케이션에서 WskCloseSocket 을 호출할 수 있습니다.

WskCloseSocket 함수를 호출하면 WSK 하위 시스템이 소켓의 함수에 대한 이전 호출에서 보류 중인 모든 IRP를 취소하고 완료합니다. WSK 하위 시스템은 또한 진행 중인 이벤트 콜백 함수가 소켓을 닫기 전에 WSK 하위 시스템에 다시 제어권을 반환하도록 합니다.

WSK 애플리케이션이 WskCloseSocket을 호출한 후에는 소켓의 함수를 더 이상 호출해서는 안 됩니다.

WSK 애플리케이션이 소켓에 보안 설명자를 적용하는 경우 소켓이 닫히면 WskSocket, WskSocketConnect 또는 WskControlSocket 호출에 지정된 보안 설명자의 캐시된 복사본이 해제되지 않습니다. WSK 애플리케이션은 보안 설명자가 더 이상 필요하지 않은 경우 WSK_RELEASE_SD 클라이언트 제어 작업을 사용하여 보안 설명자의 캐시된 복사본을 해제해야 합니다.

WSK 하위 시스템은 소켓을 만들 때 WSK 하위 시스템에 의해 할당된 소켓의 소켓 개체 인 WSK_SOCKET 대한 메모리 할당을 취소합니다.

연결 지향 소켓의 경우 WskCloseSocket 함수는 소켓이 이미 양방향으로 완전히 연결이 끊어지지 않는 한 항상 소켓의 중단 연결 해제를 수행합니다. 원격 전송 주소에서 연결 지향 소켓을 정상적으로 분리하려면 WSK 애플리케이션이 WskDisconnect 함수를 호출해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 wsk.h(Wsk.h 포함)
IRQL <= DISPATCH_LEVEL

추가 정보

WSK_PROVIDER_BASIC_DISPATCH

WSK_PROVIDER_CONNECTION_DISPATCH WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_PROVIDER_LISTEN_DISPATCH

WSK_SOCKET

WskControlSocket

WskDisconnect

WskSocket

WskSocketConnect