Share via


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

설명

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

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

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

매개 변수 writefds 는 쓰기 가능성을 검사할 소켓을 식별합니다.

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

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

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

관심 조건을 검사할 설명자가 없는 경우 readfd, writefds 또는 exceptfds 중 두 개를 null 로 지정할 수 있습니다. 하나 이상이 null이 아니어야 하며 null 이 아닌 설명자 집합에는 하나 이상의 소켓 설명자가 포함되어야 합니다.

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

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

 

 

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

fd_set 콘텐츠를 조작하고 검사 매크로는 다음과 같습니다.

FD_CLR *set)

집합에서 설명자를 제거합니다.

FD_SET*set)

설정할 설명자 추가합니다.

FD_ZERO(*set)

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

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

intWPUFDIsSet (SOCKETs, 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