다음을 통해 공유


RIO_NOTIFICATION_COMPLETION 구조체(mswsock.h)

RIO_NOTIFICATION_COMPLETION 구조체는 Winsock 등록 I/O 확장을 사용하여 네트워크 데이터를 보내거나 받기 위해 RIONotify 함수와 함께 사용할 I/O 완성 방법을 지정합니다.

구문

typedef struct _RIO_NOTIFICATION_COMPLETION {
  RIO_NOTIFICATION_COMPLETION_TYPE Type;
  union {
    struct {
      HANDLE EventHandle;
      BOOL   NotifyReset;
    } Event;
    struct {
      HANDLE IocpHandle;
      PVOID  CompletionKey;
      PVOID  Overlapped;
    } Iocp;
  };
} RIO_NOTIFICATION_COMPLETION, *PRIO_NOTIFICATION_COMPLETION;

멤버

Type

데이터를 보내거나 받을 때 RIONotify 함수와 함께 사용할 완료 유형입니다.

Event

Event.EventHandle

완료된 RIONotify 요청에 따라 설정할 이벤트에 대한 핸들입니다.

이 값은 Type 멤버가 RIO_EVENT_COMPLETION 설정되면 유효합니다.

Event.NotifyReset

RIONotify 함수가 호출될 때 연결된 이벤트가 다시 설정되도록 하는 부울 값입니다. 0이 아닌 값으로 인해 연결된 이벤트가 다시 설정됩니다.

이 값은 Type 멤버가 RIO_EVENT_COMPLETION 설정되면 유효합니다.

Iocp

Iocp.IocpHandle

RIONotify 요청 완료를 큐에 대기하는 데 사용할 I/O 완료 포트에 대한 핸들입니다.

이 값은 Type 멤버가 RIO_IOCP_COMPLETION 설정된 경우에 유효합니다.

Iocp.CompletionKey

RIONotify 요청을 큐에 대기할 때 GetQueuedCompletionStatus 또는 GetQueuedCompletionStatusEx 함수에서 반환된 lpCompletionKey 매개 변수에 사용할 값입니다.

이 값은 Type 멤버가 RIO_IOCP_COMPLETION 설정된 경우에 유효합니다.

Iocp.Overlapped

RIONotify 요청 완료를 큐에 대기할 때 사용할 OVERLAPPED 구조체에 대한 포인터입니다. 이 멤버는 유효한 OVERLAPPED 구조를 가리킵니다.

이 값은 Type 멤버가 RIO_IOCP_COMPLETION 설정된 경우에 유효합니다.

설명

RIO_NOTIFICATION_COMPLETION 구조체는 Winsock 등록 I/O 확장에 사용되는 RIONotify 함수의 동작을 지정하는 데 사용됩니다.

RIO_NOTIFICATION_COMPLETION 구조체는 RIO_CQ 만들 때 RIOCreateCompletionQueue 함수에 전달됩니다. 애플리케이션이 완료 큐에 대해 RIONotify 함수를 호출하지 않으면 완료 큐를 RIO_NOTIFICATION_COMPLETION 개체 없이 만들 수 있습니다.

이벤트를 사용하는 완료 큐의 경우 RIO_NOTIFICATION_COMPLETION 구조체의 Type 멤버가 RIO_EVENT_COMPLETION 설정됩니다. RIO_NOTIFICATION_COMPLETION 구조체의 Event.EventHandle 멤버에는 WSACreateEvent 또는 CreateEvent 함수에서 만든 이벤트에 대한 핸들이 포함되어야 합니다. RIONotify 완료를 받으려면 애플리케이션이 WSAWaitForMultipleEvents 또는 유사한 대기 루틴을 사용하여 지정된 이벤트 핸들을 대기해야 합니다. 애플리케이션이 이벤트를 다시 설정하고 다시 사용하려는 경우 애플리케이션은 RIO_NOTIFICATION_COMPLETION 구조체의 Event.NotifyReset 멤버를 0이 아닌 값으로 설정하여 오버헤드를 줄일 수 있습니다. 이로 인해 알림이 발생할 때 RIONotify 함수에 의해 이벤트가 다시 설정됩니다. 이렇게 하면 RIONotify 함수 호출 간에 이벤트를 다시 설정하기 위해 WSAResetEvent 함수를 호출할 필요가 없습니다.

I/O 완료 포트를 사용하는 완료 큐의 경우 RIO_NOTIFICATION_COMPLETION 구조의 Type 멤버가 RIO_IOCP_COMPLETION 설정됩니다. RIO_NOTIFICATION_COMPLETION 구조체의 Iocp.IocpHandle 멤버에는 CreateIoCompletionPort 함수에서 만든 I/O 완료 포트에 대한 핸들이 포함되어야 합니다. RIONotify 완료를 받으려면 애플리케이션에서 GetQueuedCompletionStatus 또는 GetQueuedCompletionStatusEx 함수를 호출해야 합니다. 애플리케이션은 완료 큐에 대한 전용 OVERLAPPED 개체를 제공해야 하며, Iocp.CompletionKey 멤버를 사용하여 완료 큐의 RIONotify 요청을 다른 완료 큐에 대한 RIONotify 완료를 비롯한 다른 I/O 완료와 구분할 수도 있습니다.

스레드 풀을 사용하는 애플리케이션은 스레드 풀 대기 개체를 사용하여 스레드 풀을 통해 RIONotify 완료를 가져올 수 있습니다. 이 경우 SetThreadpoolWait 함수에 대한 호출은 RIONotify 호출을 즉시 따라야 합니다. RIONotify 전에 SetThreadpoolWait 함수가 호출되고 애플리케이션이 RIONotify를 사용하여 이벤트 개체를 지우면 대기 개체 콜백이 가짜로 실행될 수 있습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8 [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2012 [데스크톱 앱만 해당]
머리글 mswsock.h

추가 정보

CreateEvent

CreateIoCompletionPort

GetQueuedCompletionStatus

GetQueuedCompletionStatusEx

OVERLAPPED

RIOCreateCompletionQueue

RIONotify

RIO_CQ

RIO_NOTIFICATION_COMPLETION_TYPE

SetThreadpoolWait

WSACreateEvent

WSAResetEvent

WSAWaitForMultipleEvents