다음을 통해 공유


PFN_WSK_DISCONNECT 콜백 함수(wsk.h)

WskDisconnect 함수는 원격 전송 주소에서 연결 지향 또는 스트림 소켓의 연결을 끊습니다.

구문

PFN_WSK_DISCONNECT PfnWskDisconnect;

NTSTATUS PfnWskDisconnect(
  [in]           PWSK_SOCKET Socket,
  [in, optional] PWSK_BUF Buffer,
  [in]           ULONG Flags,
  [in, out]      PIRP Irp
)
{...}

매개 변수

[in] Socket

연결이 끊긴 소켓의 소켓 개체를 지정하는 WSK_SOCKET 구조체에 대한 포인터입니다.

[in, optional] Buffer

WSK_BUF 구조체에 대한 포인터입니다. 이 구조는 소켓 연결이 끊어지기 전에 WSK 하위 시스템에서 원격 전송 주소로 전송할 데이터를 포함하는 데이터 버퍼를 설명합니다. 전송할 데이터가 없는 경우 WSK 애플리케이션은 이 포인터를 NULL로 설정합니다. Flags 매개 변수에 WSK_FLAG_ABORTIVE 지정한 경우 Buffer 매개 변수는 NULL이어야 합니다.

[in] Flags

다음 플래그를 포함하는 ULONG 값 또는 0입니다.

WSK_FLAG_ABORTIVE

WSK 하위 시스템에 소켓의 중단 연결 끊기를 수행하도록 지시합니다. WSK 애플리케이션에서 이 플래그를 지정하지 않으면 WSK 하위 시스템은 소켓의 정상적인 연결 끊기를 수행합니다.

[in, out] Irp

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

반환 값

WskDisconnect 는 다음 NTSTATUS 코드 중 하나를 반환합니다.

반환 코드 설명
STATUS_SUCCESS
소켓이 원격 전송 주소에서 성공적으로 연결이 끊어졌습니다. IRP는 성공 상태 완료됩니다.
STATUS_PENDING
WSK 하위 시스템에서 소켓의 연결을 즉시 끊을 수 없습니다. WSK 하위 시스템은 원격 전송 주소에서 소켓의 연결을 끊은 후 IRP를 완료합니다. 연결 끊기 작업의 상태 IRP의 IoStatus.Status 필드에 반환됩니다.
STATUS_FILE_FORCED_CLOSED
소켓이 더 이상 작동하지 않습니다. IRP는 실패 상태 완료됩니다. WSK 애플리케이션은 가능한 한 빨리 소켓을 닫기 위해 WskCloseSocket 함수를 호출해야 합니다.
기타 상태 코드
오류가 발생했습니다. IRP는 실패 상태 완료됩니다.

설명

WSK 애플리케이션은 이전에 원격 전송 주소 또는 수신 대기 소켓에서 수락한 소켓에 연결 지향 또는 스트림 소켓에서만 WskDisconnect 함수를 호출할 수 있습니다.

WskDisconnect 를 사용하면 WSK 하위 시스템이 기본 전송에 적합한 수단을 통해 연결이 끊어지고 있음을 원격 전송 주소에 알립니다. Buffer 매개 변수가 NULL이 아닌 경우 WSK 하위 시스템은 소켓 연결을 끊기 전에 버퍼의 데이터를 원격 전송 주소로 전송합니다.

정상 연결 해제가 수행되면 WSK 하위 시스템은 소켓의 연결을 끊기 전에 모든 미해결 전송 데이터가 전송될 때까지 대기합니다. 소켓의 연결이 끊긴 후 WSK 애플리케이션은 원격 전송 주소로 추가 데이터를 보낼 수 없습니다. 그러나 WSK 애플리케이션은 원격 애플리케이션이 소켓 끝의 연결을 끊을 때까지 원격 전송 주소에서 추가 데이터를 계속 받을 수 있습니다.

모든 전송이 반쯤 열려 있는 연결을 지원하는 것은 아닙니다. 전송이 반쯤 열려 있는 연결을 지원하지 않는 경우 WSK 애플리케이션은 정상적인 연결 끊김이 수행된 후 원격 전송 주소에서 추가 데이터를 수신하지 않습니다.

정상적인 연결 끊기를 사용하면 전송 프로토콜에 의해 연결 끊기 작업이 완전히 완료된 경우에만 IRP가 완료됩니다. 일부 전송 프로토콜의 경우 원격 전송 주소로 데이터를 전송하는 데 문제가 있는 경우 IRP가 완료되지 않을 수 있습니다. 이 경우 WSK 애플리케이션은 WskDisconnect 함수를 다시 호출하고 WSK_FLAG_ABORTIVE 플래그를 지정하거나 WskCloseSocket 함수를 호출하여 복구할 수 있습니다. 두 경우 모두 WSK 하위 시스템은 소켓의 연결을 끊고 보류 중인 IRP를 강제로 완료합니다.

중단된 연결 끊기를 수행하면 WSK 하위 시스템은 진행 중인 모든 전송 작업과 보류 중인 전송 작업을 취소하고 소켓의 연결을 끊을 때까지 기다리지 않습니다. 중단된 연결 해제 후 WSK 애플리케이션은 원격 전송 주소로 추가 데이터를 보내거나 원격 전송 주소에서 추가 데이터를 받을 수 없습니다.

WSK 애플리케이션은 WskCloseSocket 함수를 호출하여 연결을 완전히 닫을 수 있습니다.

요구 사항

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

추가 정보

WSK_BUF

WSK_PROVIDER_CONNECTION_DISPATCH

WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskConnect

WskDisconnectEvent

WskSocketConnect