다음을 통해 공유


PFN_WSK_GET_LOCAL_ADDRESS 콜백 함수(wsk.h)

WskGetLocalAddress 함수는 소켓의 로컬 전송 주소를 검색합니다.

통사론

PFN_WSK_GET_LOCAL_ADDRESS PfnWskGetLocalAddress;

NTSTATUS PfnWskGetLocalAddress(
  [in]      PWSK_SOCKET Socket,
  [out]     PSOCKADDR LocalAddress,
  [in, out] PIRP Irp
)
{...}

매개 변수

[in] Socket

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

[out] LocalAddress

소켓의 로컬 전송 주소를 수신하는 호출자 할당 버퍼에 대한 포인터입니다. 버퍼는 페이징되지 않은 메모리에 있어야 합니다. 또한 버퍼는 WSK 애플리케이션이 소켓을 만들 때 지정한 주소 패밀리에 해당하는 특정 SOCKADDR 구조체 형식을 포함할 만큼 충분히 커야 합니다.

WSK 애플리케이션이 수신 대기 소켓에서 수락한 연결 지향 소켓의 경우 주소 패밀리는 WSK 애플리케이션이 수신 대기 소켓을 만들 때 지정한 주소 패밀리와 동일합니다.

[in, out] Irp

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

반환 값

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

반환 코드 묘사
STATUS_SUCCESS
소켓의 로컬 전송 주소가 성공적으로 검색되었습니다. IRP는 성공 상태로 완료됩니다.
STATUS_PENDING
WSK 하위 시스템이 소켓에 대한 로컬 전송 주소를 즉시 검색할 수 없습니다. WSK 하위 시스템은 소켓에 대한 로컬 전송 주소를 검색한 후 IRP를 완료합니다. 검색 작업의 상태는 IRP의 IoStatus.Status 필드에 반환됩니다.
STATUS_INVALID_DEVICE_STATE
소켓이 로컬 전송 주소에 바인딩되지 않습니다. IRP는 실패 상태로 완료됩니다.
STATUS_FILE_FORCED_CLOSED
소켓이 더 이상 작동하지 않습니다. IRP는 실패 상태로 완료됩니다. WSK 애플리케이션은 WskCloseSocket 함수를 호출하여 가능한 한 빨리 소켓을 닫아야 합니다.
기타 상태 코드
오류가 발생했습니다. IRP는 실패 상태로 완료됩니다.

발언

WSK 애플리케이션은 로컬 전송 주소에 바인딩된 소켓에서만 WskGetLocalAddress 함수를 호출할 수 있습니다.

WSK 애플리케이션이 WskBind 함수를 호출할 때 수신 대기, 데이터그램 또는 스트림 소켓이 로컬 전송 주소에 바인딩됩니다.

연결 지향 소켓은 다음 방법 중 하나로 로컬 전송 주소에 바인딩됩니다.

  • WSK 애플리케이션은 WskBind 함수를 호출합니다.
  • WSK 애플리케이션은 WskSocketConnect 함수를 호출하여 소켓을 만들고, 바인딩하고, 연결합니다.
  • WSK 하위 시스템은 WSK 애플리케이션이 수신 대기 소켓에서 들어오는 연결 요청을 수락할 때 소켓을 바인딩합니다.
WskGetLocalAddress 함수는 소켓이 로컬 와일드카드 주소에 바인딩되었을 때 전송 프로토콜에 의해 소켓에 할당된 특정 로컬 전송 주소를 결정하는 데 특히 유용합니다. 로컬 와일드카드 주소에 바인딩된 연결 지향 소켓의 경우 소켓이 원격 전송 주소에 연결될 때까지 로컬 전송 주소가 전송 프로토콜에 의해 소켓에 할당되지 않을 수 있습니다. 로컬 전송 주소가 소켓에 할당되는 단계는 전송 프로토콜에 따라 다릅니다. TCP의 경우 연결 지향 소켓이 바인딩될 때 포트 번호가 할당되지만 소켓이 연결될 때까지 IP 주소가 할당되지 않습니다.

WskGetLocalAddress 함수가 STATUS_PENDING 반환하는 경우 LocalAddress 매개 변수가 가리키는 버퍼는 IRP가 완료될 때까지 유효한 상태를 유지해야 합니다. WSK 애플리케이션이 ExAllocateXxx 함수 중 하나를 사용하여 버퍼를 할당한 경우 IRP가 완료될 때까지 해당 ExFreeXxx 함수로 메모리를 해제할 수 없습니다. WSK 애플리케이션이 스택에 버퍼를 할당한 경우 IRP가 완료될 때까지 WskGetLocalAddress 함수를 호출하는 함수에서 반환할 수 없습니다.

요구 사항

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

참고 항목

SOCKADDR

WSK_PROVIDER_CONNECTION_DISPATCH WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_PROVIDER_LISTEN_DISPATCH

WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskAccept

WskAcceptEvent

WskBind

WskCloseSocket

WskConnect

WskGetRemoteAddress

WskSocketConnect