다음을 통해 공유


ProcessSocketNotifications 함수(winsock2.h)

소켓 집합을 완료 포트와 연결하고 해당 포트에서 이미 보류 중인 알림을 검색합니다. 연결되면 완료 포트는 지정된 소켓 상태 알림을 받습니다. Microsoft Winsock 공급자 소켓만 지원됩니다.

시스템 호출 오버헤드를 줄이기 위해 알림을 등록하고 ProcessSocketNotifications에 대한 단일 호출에서 검색할 수 있습니다. 또는 GetQueuedCompletionStatus와 같은 일반적인 I/O 완성 포트 함수를 호출하여 명시적으로 검색할 수 있습니다. ProcessSocketNotifications를 사용하여 검색된 알림은 GetQueuedCompletionStatusEx를 사용하여 검색한 알림과 동일합니다. 여기에는 소켓 상태 변경 이외의 알림 패킷이 포함될 수 있습니다.

알림 이벤트 플래그는 반환된 OVERLAPPED_ENTRY 구조체의 dwNumberOfBytesTransferred 필드의 정수 값입니다. 이는 dwNumberOfBytesTransferred 필드를 사용하여 정수 메시지를 보내는 JOBOBJECT_ASSOCIATE_COMPLETION_PORT 사용하는 것과 비슷합니다. SocketNotificationRetrieveEvents 함수를 호출하여 가져옵니다.

소켓 핸들은 한 번에 하나의 IOCP에만 등록할 수 있습니다. 이전에 등록된 소켓 핸들을 다시 등록하면 기존 등록이 덮어씁니다. 등록에 사용되는 핸들을 닫기 전에 명시적으로 등록을 제거하고 SOCK_NOTIFY_EVENT_REMOVE 알림을 기다려야 합니다(이 항목의 설명 참조).

자세한 정보 및 코드 예제는 Winsock 소켓 상태 알림을 참조하세요.

구문

DWORD WSAAPI ProcessSocketNotifications(
  HANDLE                   completionPort,
  UINT32                   registrationCount,
  SOCK_NOTIFY_REGISTRATION *registrationInfos,
  UINT32                   timeoutMs,
  ULONG                    completionCount,
  OVERLAPPED_ENTRY         *completionPortEntries,
  UINT32                   *receivedEntryCount
);

매개 변수

completionPort

형식: _In_ HANDLE

CreateIoCompletionPort 함수를 사용하여 만든 I/O 완성 포트에 대한 핸들입니다. 포트는 소켓을 대신하여 메시지를 보낼 때 PostQueuedCompletionStatus 함수의 CompletionPort 매개 변수에 사용됩니다.

registrationCount

형식: _In_ UINT32

registrationInfos에서 제공하는 등록 수입니다.

registrationInfos

형식: _Inout_updates_opt_(registrationCount) SOCK_NOTIFY_REGISTRATION*

알림 등록 매개 변수를 정의하는 SOCK_NOTIFY_REGISTRATION 구조체 배열에 대한 포인터입니다. 여기에는 관심 소켓, 관심 있는 알림 이벤트 및 작업 플래그가 포함됩니다. 성공하면 등록이 성공적으로 처리되었는지 여부를 요소를 검사해야 합니다. registrationCount가 0인 경우 이 인수는 NULL이어야 합니다.

timeoutMs

형식: _In_ UINT32

완료 패킷이 완료 포트에 나타날 때까지 대기하려는 시간(밀리초)입니다. 완료 패킷이 지정된 시간 내에 나타나지 않으면 함수는 시간 초과되고 ERROR_TIMEOUT 반환합니다.

timeoutMsINFINITE(0xFFFFFFFF)인 경우 함수는 시간 초과되지 않습니다. timeoutMs가 0이고 큐에서 해제할 I/O 작업이 없는 경우 함수는 즉시 시간 초과됩니다.

completionCount가 0인 경우 timeoutMs 값은 0이어야 합니다.

completionCount

형식: _In_ ULONG

제거할 OVERLAPPED_ENTRY 구조체의 최대 수입니다. 0을 지정하면 등록 작업만 처리됩니다.

completionPortEntries

형식: _Out_writes_to_opt_(completionCount, *receivedEntryCount) OVERLAPPED_ENTRY*

입력에서는 미리 할당된 OVERLAPPED_ENTRY 구조의 배열을 가리킵니다. 배열은 registrationInfos 배열과 겹치지 않아야 합니다. completionCount가 0인 경우 completionPortEntries 값은 NULL이어야 합니다.

출력에서는 항목을 포함하는 OVERLAPPED_ENTRY 구조의 배열을 수신합니다. 배열 요소의 수는 ReceivedEntryCount에서 제공합니다. 구조체의 dwNumberOfBytesTransferred 필드는 수신된 이벤트의 정수 마스크입니다. lpOverlapped 필드는 예약되어 있으므로 포인터로 사용하면 안 됩니다.

receivedEntryCount

형식: UINT32 _Out_opt_*

제거된 항목 수를 수신하는 변수에 대한 포인터입니다. completionCount가 0인 경우 NULL이어야 합니다.

반환 값

성공하면 ERROR_SUCCESS 반환합니다. 함수가 성공하고 0이 아닌 completionCount를 제공했지만 지정된 시간 내에 완료 패킷이 나타나지 않으면 WAIT_TIMEOUT 반환합니다. 그렇지 않으면 는 적절한 WSAE* 오류 코드를 반환합니다.

ERROR_SUCCESS 또는 WAIT_TIMEOUT 반환되는 경우 개별 등록 정보의 등록 결과를 검사해야 합니다. 그렇지 않으면 전체 작업이 실패하고 변경이 발생하지 않았습니다.

설명

알림을 받을 때 가능한 이벤트는 SocketNotificationRetrieveEvents 를 참조하세요.

요구 사항

   
지원되는 최소 클라이언트 Windows 10 빌드 20348
지원되는 최소 서버 Windows 10 빌드 20348
머리글 winsock2.h
라이브러리 Ws2_32.lib
DLL Ws2_32.dll

추가 정보