Share via


PFN_WSK_RECEIVE_FROM_EVENT 콜백 함수(wsk.h)

WskReceiveFromEvent 이벤트 콜백 함수는 데이터그램 소켓에서 하나 이상의 데이터그램이 수신되었음을 WSK 애플리케이션에 알릴 수 있습니다.

구문

PFN_WSK_RECEIVE_FROM_EVENT PfnWskReceiveFromEvent;

NTSTATUS PfnWskReceiveFromEvent(
  [in, optional] PVOID SocketContext,
  [in]           ULONG Flags,
  [in, optional] PWSK_DATAGRAM_INDICATION DataIndication
)
{...}

매개 변수

[in, optional] SocketContext

데이터그램을 받은 데이터그램 소켓의 소켓 컨텍스트에 대한 포인터입니다. WSK 애플리케이션은 WskSocket 함수를 호출하여 데이터그램 소켓을 만들 때 WSK 하위 시스템에 대한 이 포인터를 제공했습니다.

[in] Flags

다음 플래그 조합의 비트 OR을 포함하는 ULONG 값입니다.

MSG_BCAST

데이터그램은 링크 계층 브로드캐스트 또는 브로드캐스트 주소인 대상 전송 주소로 수신되었습니다.

MSG_MCAST

데이터그램은 멀티캐스트 주소인 대상 전송 주소로 수신되었습니다.

WSK_FLAG_AT_DISPATCH_LEVEL

IRQL = DISPATCH_LEVEL WskReceiveFromEvent 이벤트 콜백 함수라는 WSK 하위 시스템입니다. 이 플래그가 설정되지 않은 경우 WSK 하위 시스템은 IRQL <= DISPATCH_LEVEL WskReceiveFromEvent 이벤트 콜백 함수를 호출했을 수 있습니다.

[in, optional] DataIndication

수신된 데이터그램을 설명하는 WSK_DATAGRAM_INDICATION 구조체의 연결된 목록에 대한 포인터입니다. 이 매개 변수가 NULL이면 소켓이 더 이상 작동하지 않으며 WSK 애플리케이션은 WskCloseSocket 함수를 호출하여 가능한 한 빨리 소켓을 닫아야 합니다.

반환 값

WSK 애플리케이션의 WskReceiveFromEvent 이벤트 콜백 함수는 다음 NTSTATUS 코드 중 하나를 반환할 수 있습니다.

반환 코드 설명
STATUS_SUCCESS
WSK 애플리케이션은 데이터그램을 수락하고 의 연결된 목록에서 모든 데이터그램을 검색했습니다. WSK_DATAGRAM_INDICATION 구조체. WSK 하위 시스템은 소켓에서 새 데이터그램을 수신할 때 WskReceiveFromEvent 이벤트 콜백 함수를 다시 호출할 수 있습니다.
STATUS_PENDING
WSK 애플리케이션은 데이터그램을 수락했지만 의 연결된 목록에서 모든 데이터그램을 검색하지는 않았습니다. WSK_DATAGRAM_INDICATION 구조체. WSK 애플리케이션은 모든 데이터그램이 검색될 때까지 연결된 WSK_DATAGRAM_INDICATION 구조 목록을 유지합니다. WSK 애플리케이션이 모든 데이터그램을 검색한 후 WskRelease 함수를 호출하여 연결된 WSK_DATAGRAM_INDICATION 구조 목록을 WSK 하위 시스템에 다시 해제합니다. WSK 하위 시스템은 소켓에서 새 데이터그램을 수신할 때 WskReceiveFromEvent 이벤트 콜백 함수를 다시 호출할 수 있습니다.
STATUS_DATA_NOT_ACCEPTED
WSK 애플리케이션이 데이터그램을 수락하지 않았습니다. WSK 애플리케이션이 이 상태 코드를 반환하는 경우 WSK 하위 시스템은 WSK 애플리케이션이 WskReceiveFromEvent 이벤트 콜백 함수를 사용하도록 설정한 방법에 따라 다르게 응답합니다.
  • WSK 애플리케이션이 SO_WSK_EVENT_CALLBACK 소켓 옵션을 사용하여 WskReceiveFromEvent 이벤트 콜백 함수를 사용하도록 설정한 경우 WSK 하위 시스템에는 가능한 경우 또는 프로토콜에 필요한 경우 기본 전송 버퍼가 데이터그램에 있습니다. WSK 하위 시스템은 WskReceiveFromEvent 이벤트 콜백 함수를 사용하지 않도록 설정하고 WSK 애플리케이션이 SO_WSK_EVENT_CALLBACK 소켓 옵션으로 이 이벤트 콜백 함수를 다시 사용하도록 설정할 때까지 WskReceiveFromEvent 이벤트 콜백 함수를 다시 호출하지 않습니다. WSK 애플리케이션이 WskReceiveFromEvent 이벤트 콜백 함수를 다시 사용하도록 설정한 후 WSK 하위 시스템은 남은 버퍼링된 데이터그램과 소켓에서 새 데이터그램이 수신될 때 WskReceiveFromEvent 이벤트 콜백 함수 호출을 다시 시작합니다.
  • WSK 애플리케이션이 를 사용하여 WskReceiveFromEvent 이벤트 콜백 함수를 사용하도록 설정한 경우 클라이언트 제어 작업을 WSK_SET_STATIC_EVENT_CALLBACKS WSK 하위 시스템은 WskReceiveFromEvent 이벤트 콜백 함수를 사용하지 않도록 설정하지 않습니다. WSK 하위 시스템은 소켓에서 새 데이터그램을 수신할 때 WskReceiveFromEvent 이벤트 콜백 함수를 계속 호출합니다.

설명

WSK 하위 시스템은 이전에 SO_WSK_EVENT_CALLBACK 소켓 옵션을 사용하여 이벤트 콜백 함수를 사용하도록 설정한 경우에만 데이터그램 소켓에서 새 데이터그램을 수신할 때 WSK 애플리케이션의 WskReceiveFromEvent 이벤트 콜백 함수를 호출합니다. 소켓의 이벤트 콜백 함수를 사용하도록 설정하는 방법에 대한 자세한 내용은 이벤트 콜백 함수 사용 및 비활성화를 참조하세요.

데이터그램 소켓 에서 WSK 애플리케이션의 WskReceiveFromEvent 이벤트 콜백 함수를 사용하도록 설정하고 애플리케이션이 동일한 데이터그램 소켓에서 WskReceiveFrom 함수에 대한 보류 중인 호출이 있는 경우 데이터그램이 도착하면 WskReceiveFrom 함수에 대한 보류 중인 호출이 WskReceiveFromEvent 이벤트 콜백 함수보다 우선적으로 적용됩니다. WSK 하위 시스템은 WskReceiveFrom 함수에 대한 보류 중인 호출에서 큐에 대기 중인 IRP가 없는 경우에만 애플리케이션의 WskReceiveFromEvent 이벤트 콜백 함수를 호출합니다. 그러나 WSK 애플리케이션은 WSK 하위 시스템이 WskReceiveFrom 함수에 대한 보류 중인 호출이 있는 데이터그램 소켓에 대해 애플리케이션의 WskReceiveFromEvent 이벤트 콜백 함수를 호출하지 않는다고 가정해서는 안 됩니다. WSK 하위 시스템이 소켓에 대한 WSK 애플리케이션의 WskReceiveFromEvent 이벤트 콜백 함수를 계속 호출할 수 있는 경합 조건이 있습니다. WSK 애플리케이션이 WSK 하위 시스템이 데이터그램 소켓에서 애플리케이션의 WskReceiveFromEvent 이벤트 콜백 함수를 호출하지 않도록 하는 유일한 방법은 소켓에서 애플리케이션의 WskReceiveFromEvent 이벤트 콜백 함수를 사용하지 않도록 설정하는 것입니다.

WSK 하위 시스템은 IRQL <= DISPATCH_LEVEL WSK 애플리케이션의 WskReceiveFromEvent 이벤트 콜백 함수를 호출합니다.

WSK 애플리케이션의 WskReceiveFromEvent 이벤트 콜백 함수는 WSK 완료 또는 이벤트 콜백 함수의 컨텍스트에서 다른 WSK 요청이 완료될 때까지 기다리지 않아야 합니다. 콜백은 다른 WSK 요청을 시작할 수 있지만(DISPATCH_LEVEL 시간이 너무 많이 소요되지 않는다고 가정) 콜백이 IRQL = PASSIVE_LEVEL 호출되는 경우에도 완료될 때까지 기다리지 않아야 합니다.

요구 사항

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

추가 정보

WSK_CLIENT_DATAGRAM_DISPATCH

WSK_DATAGRAM_INDICATION

WskCloseSocket

WskControlSocket

WskReceiveFrom

WskRelease

WskSendTo

WskSocket