WSAPoll 함수(winsock2.h)

WSAPoll 함수는 하나 이상의 소켓 상태 결정합니다.

구문

int WSAAPI WSAPoll(
  [in, out] LPWSAPOLLFD fdArray,
  [in]      ULONG       fds,
  [in]      INT         timeout
);

매개 변수

[in, out] fdArray

상태 요청되는 소켓 집합을 지정하는 하나 이상의 POLLFD 구조체 배열입니다. 배열에는 유효한 소켓이 있는 구조체가 하나 이상 포함되어야 합니다. 반환 시 이 매개 변수는 상태 쿼리 조건과 일치하는 각 항목에 설정된 revents 상태 플래그 멤버가 있는 업데이트된 소켓을 받습니다.

[in] fds

fdarrayWSAPOLLFD 구조체 수입니다. 이는 반드시 상태 요청되는 소켓의 수가 아닙니다.

[in] timeout

다음 값에 따라 대기 동작을 지정하는 값입니다.

의미
0보다 큼 대기 시간(밀리초)입니다.
0 즉시 반환합니다.
0보다 작음 무기한 기다립니다.

반환 값

다음 값 중 하나를 반환합니다.

반환 값 Description
0 타이머가 만료되기 전에 쿼리된 상태에 소켓이 없습니다.
0보다 큼 POLLFD 구조체의 revents 멤버가 0이 아닌 fdarray의 요소 수입니다.
SOCKET_ERROR 오류가 발생했습니다. WSAGetLastError 함수를 호출하여 확장된 오류 코드를 검색합니다.
 
확장 오류 코드 의미
WSAENETDOWN
네트워크 하위 시스템이 실패했습니다.
WSAEFAULT
사용자 입력 매개 변수를 읽는 동안 예외가 발생했습니다.
WSAEINVAL
잘못된 매개 변수가 전달되었습니다. 소켓 상태 요청할 때 fdarray 매개 변수가 가리키는 WSAPOLLFD 구조체에 이 오류가 반환됩니다. 또한 fdarray 매개 변수가 가리키는 WSAPOLLFD 구조체의 fd 멤버에 지정된 소켓이 유효하지 않은 경우에도 이 오류가 반환됩니다.
WSAENOBUFS
함수가 충분한 메모리를 할당할 수 없습니다.

설명

WSAPoll 함수는 Windows Vista 이상에서 정의됩니다.

WSAPOLLFD 구조체입니다. 애플리케이션은 WSAPOLLFD 구조체의 이벤트 멤버에 적절한 플래그를 설정하여 각 해당 소켓에 대해 요청된 상태 유형을 지정합니다. WSAPoll 함수는 WSAPOLLFD 구조체의 revents 멤버에 있는 소켓의 상태 반환합니다.

각 소켓에 대해 호출자는 읽기 또는 쓰기 상태 대한 정보를 요청할 수 있습니다. 오류 조건은 항상 반환되므로 이에 대한 정보를 요청할 필요가 없습니다.

fdarray 매개 변수가 가리키는 WSAPOLLFD 구조체입니다. 이러한 조건을 충족하지 않고 오류 조건이 없는 모든 소켓에는 해당 revents 멤버가 0으로 설정됩니다.

해당 소켓에 대한 상태 요청할 때 지정된 소켓에 대해 WSAPOLLFD 구조에서 다음 플래그의 조합을 설정할 수 있습니다.

플래그 설명
POLLPRI 우선 순위 데이터는 차단 없이 읽을 수 있습니다. 이 플래그는 Microsoft Winsock 공급자에서 지원되지 않습니다.
POLLRDBAND 우선 순위 대역(대역 외) 데이터는 차단 없이 읽을 수 있습니다.
POLLRDNORM 차단 없이 일반 데이터를 읽을 수 있습니다.
POLLWRNORM 일반 데이터는 차단 없이 작성할 수 있습니다.
 

POLLIN 플래그는 POLLRDNORMPOLLRDBAND 플래그 값의 조합으로 정의됩니다. POLLOUT 플래그는 POLLWRNORM 플래그 값과 동일하게 정의됩니다.

WSAPOLLFD 구조체에는 Winsock 공급자가 지원하는 위의 플래그 조합만 포함되어야 합니다. 다른 모든 값은 오류로 간주되며 WSAPollSOCKET_ERROR 반환합니다. WSAGetLastError 함수에 대한 후속 호출은 WSAEINVAL의 확장된 오류 코드를 검색합니다. POLLPRI 플래그가 Microsoft Winsock 공급자의 소켓에 설정된 경우 WSAPoll 함수가 실패합니다.

WSAPOLLFD 구조체가 소켓 상태 나타내기 위해 fdarray 매개 변수가 가리키는 경우:

플래그 설명
POLLERR 오류가 발생했습니다.
POLLHUP 스트림 지향 연결의 연결이 끊어지거나 중단되었습니다.
POLLNVAL 잘못된 소켓이 사용되었습니다.
POLLPRI 우선 순위 데이터는 차단 없이 읽을 수 있습니다. 이 플래그는 Microsoft Winsock 공급자가 반환하지 않습니다.
POLLRDBAND 우선 순위 대역(대역 외) 데이터는 차단 없이 읽을 수 있습니다.
POLLRDNORM 차단 없이 일반 데이터를 읽을 수 있습니다.
POLLWRNORM 일반 데이터는 차단 없이 작성할 수 있습니다.
 

TCP 및 UDP 소켓과 관련하여 다음을 수행합니다.

  • WSAPOLLFD 구조는 POLLRDNORM과 같은 일반 데이터입니다.
  • WSAPOLLFD 구조체, 후속 사각형 작업은 차단 없이 완료되도록 보장됩니다.
  • POLLWRNORMWSAPOLLFD 구조체입니다.
  • POLLRDNORMWSAPOLLFD 구조체입니다. 수락에 대한 후속 호출은 차단 없이 완료되도록 보장됩니다.
  • POLLRDBANDWSAPOLLFD 구조체입니다.
  • 원격 피어가 송신 작업을 종료할 때 WSAPOLLFD 구조입니다(TCP FIN이 수신됨). 후속 recv 함수 요청은 0바이트를 반환합니다.
  • 원격 피어가 정상적인 연결 끊기를 시작하는 경우 WSAPOLLFD 구조체입니다.
  • 원격 피어의 연결이 갑자기 끊어지면 WSAPOLLFD 구조체가 반환됩니다.
  • 로컬 소켓이 닫힌 경우 WSAPOLLFD 구조체입니다.

fdarray의 요소 수(소켓 아님)는 nfds로 표시됩니다. fd 멤버가 음수 값으로 설정된 fdarray의 멤버는 무시되고 반환 시 해당 revent가POLLNVAL로 설정됩니다. 이 동작은 고정 된 fdarray 할당을 유지하고 사용하지 않는 항목을 제거하거나 메모리를 다시 할당하기 위해 배열을 압축하지 않는 애플리케이션에 유용합니다. WSAPoll을 호출하기 전에 요소에 대한 revent를 지울 필요가 없습니다.

timeout 인수는 함수가 반환되기 전에 대기하는 시간을 지정합니다. 양수 값에는 반환하기 전에 대기할 시간(밀리초)이 포함됩니다. 값이 0이면 WSAPoll 이 즉시 반환되고 음수 값은 WSAPoll 이 무기한 대기해야 했음을 나타냅니다.

참고시간 제한 매개 변수가 음수로 설정된 WSAPoll과 같은 차단 Winsock 호출을 실행하는 경우 Winsock은 호출이 완료되기 전에 네트워크 이벤트를 기다려야 할 수 있습니다. Winsock은 이 상황에서 경고 가능한 대기를 수행합니다. 이 대기는 동일한 스레드에서 예약된 APC(비동기 프로시저 호출)에 의해 중단될 수 있습니다. 동일한 스레드에서 지속적인 차단 Winsock 호출을 중단한 APC 내에서 다른 차단 Winsock 호출을 실행하면 정의되지 않은 동작이 발생하며 Winsock 클라이언트에서 시도해서는 안 됩니다.
 
참고 Windows 10 버전 2004를 기준으로 TCP 소켓이 연결되지 않는 경우(POLLHUP \| POLLERR \| POLLWRNORM)이 표시됩니다.
 

Windows 8.1Windows Server 2012 R2: 이 함수는 Windows 8.1, Windows Server 2012 R2 이상에서 Windows 스토어 앱에서 지원됩니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8.1, Windows Vista [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 winsock2.h(Winsock2.h 포함)
라이브러리 Ws2_32.lib
DLL Ws2_32.dll

추가 정보

WSAGetLastError

WSAPOLLFD