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 반환하는 경우 IRP가 완료될 때까지 LocalAddress 매개 변수가 가리키는 버퍼는 유효한 상태로 유지되어야 합니다. 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