EN
このコンテンツは設定された言語で表示できません。英語版のページが表示されます。

RIO_NOTIFICATION_COMPLETION structure

The RIO_NOTIFICATION_COMPLETION structure specifies the method for I/O completion to be used with a RIONotify function for sending or receiving network data with the Winsock registered I/O extensions.

Syntax


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;

Members

Type

The type of completion to use with the RIONotify function when sending or receiving data.

Event
EventHandle

The handle for the event to set following a completed RIONotify request.

This value is valid when the Type member is set to RIO_EVENT_COMPLETION.

NotifyReset

The boolean value that causes the associated event to be reset when the RIONotify function is called. A non-zero value cause the associated event to be reset.

This value is valid when the Type member is set to RIO_EVENT_COMPLETION.

Iocp
IocpHandle

The handle for the I/O completion port to use for queuing a RIONotify request completion.

This value is valid when the Type member is set to RIO_IOCP_COMPLETION.

CompletionKey

The value to use for lpCompletionKey parameter returned by the GetQueuedCompletionStatus or GetQueuedCompletionStatusEx function when queuing a RIONotify request.

This value is valid when the Type member is set to RIO_IOCP_COMPLETION.

Overlapped

A pointer to the OVERLAPPED structure to use when queuing a RIONotify request completion. This member must point to a valid OVERLAPPED structure.

This value is valid when the Type member is set to RIO_IOCP_COMPLETION.

Remarks

The RIO_NOTIFICATION_COMPLETION structure is used to specify the behavior of the RIONotify function used with the Winsock registered I/O extensions.

The RIO_NOTIFICATION_COMPLETION structure is passed to the RIOCreateCompletionQueue function when a RIO_CQ is created. If an application does not call the RIONotify function for a completion queue, the completion queue can be created without a RIO_NOTIFICATION_COMPLETION object.

For completion queues using an event, the Type member of the RIO_NOTIFICATION_COMPLETION structure is set to RIO_EVENT_COMPLETION. The Event.EventHandle member of the RIO_NOTIFICATION_COMPLETION structure should contain the handle for an event created by the WSACreateEvent or CreateEvent function. To receive the RIONotify completion, the application should wait on the specified event handle using WSAWaitForMultipleEvents or a similar wait routine. If the application plans to reset and reuse the event, the application can reduce overhead by setting the Event.NotifyReset member of the RIO_NOTIFICATION_COMPLETION structure to a non-zero value. This causes the event to be reset by the RIONotify function when notification occurs. This mitigates the need to call the WSAResetEvent function to reset the event between calls to the RIONotify function.

For completion queues using an I/O completion port, the Type member of the RIO_NOTIFICATION_COMPLETION structure is set to RIO_IOCP_COMPLETION. The Iocp.IocpHandle member of the RIO_NOTIFICATION_COMPLETION structure should contain the handle for an I/O completion port created by the CreateIoCompletionPort function. To receive the RIONotify completion, the application should call the GetQueuedCompletionStatus or GetQueuedCompletionStatusEx function. The application should provide a dedicated OVERLAPPED object for the completion queue, and it may also use the Iocp.CompletionKey member to distinguish RIONotify requests on the completion queue from other I/O completions including RIONotify completions for other completion queues.

An application using thread pools can use thread pool wait objects to get RIONotify completions via its thread pool. In that case, the call to the SetThreadpoolWait function should immediately follow the call to RIONotify. If the SetThreadpoolWait function is called before RIONotify and the application relies on RIONotify to clear the event object, this may result in spurious executions of the wait object callback.

Requirements

Minimum supported client

Windows 8 [desktop apps only]

Minimum supported server

Windows Server 2012 [desktop apps only]

Header

Mswsock.h

See also

CreateIoCompletionPort
CreateEvent
GetQueuedCompletionStatus
GetQueuedCompletionStatusEx
OVERLAPPED
RIO_CQ
RIO_NOTIFICATION_COMPLETION_TYPE
RIOCreateCompletionQueue
RIONotify
SetThreadpoolWait
WSACreateEvent
WSAResetEvent
WSAWaitForMultipleEvents

 

 

コミュニティの追加

追加
表示:
© 2014 Microsoft