다음을 통해 공유


LPWSPSELECT 콜백 함수(ws2spi.h)

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

통사론

LPWSPSELECT Lpwspselect;

int Lpwspselect(
  [in]      int nfds,
  [in, out] fd_set *readfds,
  [in, out] fd_set *writefds,
  [in, out] fd_set *exceptfds,
  [in]      const timeval *timeout,
  [out]     LPINT lpErrno
)
{...}

매개 변수

[in] nfds

호환성을 위해서만 무시되고 포함됩니다.

[in, out] readfds

가독성을 확인할 소켓 집합에 대한 선택적 포인터입니다.

[in, out] writefds

쓰기 가능성을 확인할 소켓 집합에 대한 선택적 포인터입니다.

[in, out] exceptfds

오류를 확인할 소켓 집합에 대한 선택적 포인터입니다.

[in] timeout

LPWSPSelect 대기하는 최대 시간 또는 차단 작업에 대한 null 시간 구조의 형태로 .

[out] lpErrno

오류 코드에 대한 포인터입니다.

반환 값

LPWSPSelect 함수는 fd_set 구조에 준비되고 포함된 설명자의 총 수를 반환하거나 오류가 발생한 경우 SOCKET_ERROR. 반환 값이 SOCKET_ERROR 경우 lpErrno특정 오류 코드를 사용할 수 있습니다.

오류 코드 의미
WSAEFAULT
Windows 소켓 서비스 공급자는 내부 작업에 필요한 리소스를 할당할 수 없거나 readfds, writefds, 또는 시간별 매개 변수가 사용자 주소 공간의 일부가 아닙니다.
WSAENETDOWN
네트워크 하위 시스템이 실패했습니다.
WSAEINVAL
시간 제한 값이 잘못되었거나 세 설명자 매개 변수가 모두 NULL.
WSAEINTR
(차단) LPWSPCancelBlockingCall통해 호출이 취소되었습니다.
WSAEINPROGRESS
Windows 소켓 호출 차단이 진행 중이거나 서비스 공급자가 여전히 콜백 함수를 처리하고 있습니다.
WSAENOTSOCK
설명자 집합 중 하나에는 소켓이 아닌 항목이 포함되어 있습니다.

발언

이 함수는 하나 이상의 소켓 상태를 확인하는 데 사용됩니다. 각 소켓에 대해 호출자는 읽기, 쓰기 또는 오류 상태에 대한 정보를 요청할 수 있습니다. 지정된 상태가 요청되는 소켓 집합은 fd_set 구조체로 표시됩니다. fd_set 모든 항목은 서비스 공급자가 만든 소켓에 해당합니다(즉, 프로토콜을 설명하는 WSAPROTOCOL_INFO 구조에는 providerId 값이 동일). 반환 시 구조체는 지정된 조건을 충족하는 이러한 소켓의 하위 집합을 반영하도록 업데이트되고 LPWSPSelect 조건을 충족하는 총 소켓 수를 반환합니다. 매크로 집합은 fd_set조작하기 위해 제공됩니다. 이러한 매크로는 Berkeley 소프트웨어에서 사용되는 매크로와 호환되지만 기본 표현은 완전히 다릅니다.

읽기 매개 변수는 가독성을 확인해야 하는 소켓을 식별합니다. 소켓이 현재 LPWSPListen통해 수신 대기하는 경우 들어오는 연결 요청을 받은 경우 읽을 수 있는 것으로 표시되므로 LPWSPAccept 차단 없이 완료되도록 보장됩니다. 다른 소켓의 경우 가독성은 LPWSPRecv 또는 LPWSPRecvFrom 차단하지 않도록 대기 중인 데이터를 읽을 수 있음을 의미합니다.

연결 지향 소켓의 경우 가독성은 피어로부터 닫기 요청을 수신했음을 나타낼 수도 있습니다. 가상 회로가 정상적으로 닫힌 경우 LPWSPRecv 0바이트를 읽은 상태로 즉시 반환됩니다. 가상 회로가 다시 설정된 경우 LPWSPRecv WSAECONNRESET과 같은 오류 코드로 즉시 완료됩니다. 소켓 옵션 SO_OOBINLINE 활성화된 경우 OOB 데이터의 존재 여부를 확인합니다(LPWSPSetSockOpt참조).

쓰기 매개 변수는 쓰기 가능성을 확인해야 하는 소켓을 식별합니다.

  • 소켓이 LPWSPConnect통해 연결하는 경우 쓰기성은 연결 설정이 성공적으로 완료되었음을 의미합니다.
  • 소켓이 LPWSPConnect수신 대기하는 과정에 없는 경우 쓰기성은 LPWSPSend 또는 LPWSPSendTo 성공을 보장한다는 것을 의미합니다.

그러나 len 사용 가능한 나가는 시스템 버퍼 공간의 양을 초과하는 경우 차단 소켓에서 차단할 수 있습니다. 특히 다중 스레드 환경에서 이러한 보장이 유효한 것으로 간주될 수 있는 기간은 지정되지 않았습니다.

매개 변수 예외 OOB 데이터의 존재 여부 또는 예외적 오류 조건을 확인해야 하는 소켓을 식별합니다. OOB 데이터는 SO_OOBINLINE 옵션이 FALSE경우에만 이 방식으로 보고됩니다. 소켓이 LPWSPConnect(차단 안 됨) 연결을 경우 연결 시도 실패는 예외표시됩니다. 이 사양은 포함할 다른 오류를 정의하지 않습니다.

readfds, writefds또는 exceptfds 설명자가 없는 경우 null 지정할 수 있습니다. 하나 이상의null있어야 하며,null이 아닌 설명자 집합에는 하나 이상의 소켓 설명자가 포함되어야 합니다.

요약: LPWSPSelect 다음에 따라 반환될 때 특정 집합에서 소켓이 식별됩니다.

매개 변수 묘사
readfds: LPWSPListen 호출되면 연결이 보류 중이며 LPWSPAccept 성공합니다. 데이터를 읽을 수 있습니다(SO_OOBINLINE 사용하도록 설정된 경우 OOB 데이터 포함). 연결이 닫혀 있거나 다시 설정/종료되었습니다.
writefds: LPWSPConnect(차단 해제)경우 연결이 성공합니다. 데이터를 보낼 수 있습니다.
예외: LPWSPConnect(차단 해제)경우 연결 시도가 실패했습니다. OOB 데이터는 읽기에 사용할 수 있습니다(SO_OOBINLINE 사용하지 않도록 설정된 경우에만).

 

 

설명자 집합을 조작하고 확인하기 위해 헤더 파일 Ws2spi.h에 매크로 3개와 upcall 함수 1개가 정의되어 있습니다. 변수 FD_SETSIZE 집합의 최대 설명자 수를 결정합니다. (FD_SETSIZE 기본값은 64이며 #defining FD_SETSIZE Ws2spi.h 이전의 다른 값으로 수정할 수 #including. 내부적으로 fd_set 소켓 핸들은 Berkeley UNIX에서와 같이 비트 플래그로 표시되지 않습니다. 해당 데이터 표현은 불투명합니다. 이러한 매크로를 사용하면 서로 다른 소켓 환경 간에 소프트웨어 이식성이 유지됩니다.

fd_set 내용을 조작하고 확인하는 매크로는 다음과 같습니다.

FD_CLR(s, *set)

집합설명자 제거합니다.

FD_SET(, *set)

설명자 설정합니다.

FD_ZERO(*set)

null 집합으로 집합을 초기화합니다.

멤버 자격을 확인하는 데 사용되는 upcall 함수는 다음과 같습니다.

intWPUFDIsSet (SOCKET, FD_SET FAR *set);

집합의 멤버이거나 0이 아니면 0이 아닌 값을 반환합니다.

매개 변수 시간 제한LPWSPSelect 완료하는 데 걸리는 시간을 제어합니다. 시간 제한null 포인터인 경우 하나 이상의 설명자가 지정된 조건을 충족할 때까지 LPWSPSelect 무기한 차단됩니다. 그렇지 않은 경우 시간 제한 LPWSPSelect 반환하기 전에 대기해야 하는 최대 시간을 지정하는 시간 구조를 가리킵니다. LPWSPSelect 반환되면 시간 구조체의 내용은 변경되지 않습니다. timeval {0, 0}으로 초기화되면 LPWSPSelect 즉시 반환됩니다. 선택한 소켓의 상태를 폴링하는 데 사용됩니다. 이 경우 LPWSPSelect 호출은 차단 해제로 간주되며 비블로킹 호출에 대한 표준 가정이 적용됩니다. 예를 들어 차단 후크가 호출되지 않고 Windows 소켓 공급자가 생성되지 않습니다.

메모

LPWSPSelect 함수는 LPWSPAsyncSelect 또는 LPWSPEventSelect등록된 소켓 이벤트의 지속성에 영향을 주지 않습니다.

요구 사항

요구
지원되는 최소 클라이언트 Windows 2000 Professional [데스크톱 앱만 해당]
지원되는 최소 서버 Windows 2000 Server [데스크톱 앱만 해당]
헤더 ws2spi.h

참고 항목

LPWSPAccept

LPWSPConnect

LPWSPEventSelect

LPWSPRecv

LPWSPRecvFrom

LPWSPSend

LPWSPSendTo