LPWSPEVENTSELECT 콜백 함수(ws2spi.h)
LPWSPEventSelect 함수는 제공된 네트워크 이벤트 집합과 연결할 이벤트 개체를 지정합니다.
통사론
LPWSPEVENTSELECT Lpwspeventselect;
int Lpwspeventselect(
[in] SOCKET s,
[in] WSAEVENT hEventObject,
[in] long lNetworkEvents,
[out] LPINT lpErrno
)
{...}
매개 변수
[in] s
소켓을 식별하는 설명자입니다.
[in] hEventObject
제공된 네트워크 이벤트 집합과 연결할 이벤트 개체를 식별하는 핸들입니다.
[in] lNetworkEvents
Windows 소켓 SPI 클라이언트에 관심이 있는 네트워크 이벤트의 조합을 지정하는 비트 마스크입니다. 이러한 값과 함께 비트 OR 연산자를 사용하여 생성됩니다.
값 | 의미 |
---|---|
|
읽기 준비 상태 알림을 발급합니다. |
|
쓰기 준비 상태 알림을 발급합니다. |
|
OOB 데이터 도착 알림을 발급합니다. |
|
들어오는 연결에 대한 알림을 발급합니다. |
|
완료된 연결에 대한 알림을 발급합니다. |
|
소켓 닫기 알림을 발급합니다. |
|
소켓(QoS) 변경에 대한 알림을 발급합니다. |
|
예약. |
|
지정된 대상에 대한 라우팅 인터페이스 변경에 대한 알림을 발급합니다. |
|
소켓의 주소 패밀리에 대한 로컬 주소 목록 변경에 대한 알림을 발생합니다. |
[out] lpErrno
오류 코드에 대한 포인터입니다. 자세한 내용은 반환 값 섹션을 참조하세요.
반환 값
Windows Sockets SPI 클라이언트의 네트워크 이벤트 사양 및 관련 이벤트 개체가 성공한 경우 반환 값은 0입니다. 그렇지 않으면 SOCKET_ERROR 값이 반환되고 lpErrno특정 오류 번호를 사용할 수 있습니다.
오류 코드 | 의미 |
---|---|
|
네트워크 하위 시스템이 실패했습니다. |
|
지정된 매개 변수 중 하나가 잘못되었거나 지정된 소켓이 잘못된 상태임을 나타냅니다. |
|
Windows 소켓 호출 차단이 진행 중이거나 서비스 공급자가 여전히 콜백 함수를 처리하고 있습니다. |
|
설명자가 소켓이 아닙니다. |
발언
이 함수는 hEventObject
LPWSPEventSelectLPWSPAsyncSelect매우 유사하게 작동합니다. 이 경우 지명된 네트워크 이벤트가 발생할 때 수행되는 작업의 차이입니다. WSPAsyncSelect Windows Sockets SPI 클라이언트 지정 Windows 메시지를 게시하는 반면, LPWSPEventSelect는 연결된 이벤트 개체를 설정하고 내부 네트워크 이벤트 레코드에 이 이벤트의 발생을 기록할 있습니다. Windows 소켓 SPI 클라이언트는 LPWSPEnumNetworkEvents 사용하여 내부 네트워크 이벤트 레코드의 내용을 검색하여 지정된 네트워크 이벤트 중 어떤 이벤트가 발생했는지 확인할 수 있습니다.
LPWSPEventSelectLPWSPEnumNetworkEvents통해 네트워크 활동 및 오류를 기록하고 검색할 수 있는 유일한 함수입니다. 해당 함수가 네트워크 활동 및 오류를 보고하는 방법을 알아보려면 LPWSPSelect 및 LPWSPAsyncSelect 대한 설명을 참조하세요.
이 함수는 lNetworkEvents값에 관계없이 소켓 비블로킹 모드로 자동으로 설정합니다.
소켓에 대한
rc = WSPEventSelect(s, hEventObject, FD_READ | FD_WRITE);
다른 네트워크 이벤트에 대해 다른 이벤트 개체를 지정할 수 없습니다. 다음 코드는 작동하지 않습니다. 두 번째 호출은 첫 번째 호출의 효과를 취소하고 유일한 연결은 hEventObject2와 연결된 FD_WRITE 네트워크 이벤트입니다.
// Incorrect example.
rc = WSPEventSelect(s, hEventObject1, FD_READ);
rc = WSPEventSelect(s, hEventObject2, FD_WRITE);
소켓에서 네트워크 이벤트 연결 및 선택을 취소하려면 lNetworkEvents 0으로 설정해야 합니다. 이 경우 hEventObject 매개 변수는 무시됩니다.
rc = WSPEventSelect(s, hEventObject, 0);
LPWSPCloseSocket 소켓을 닫으면 소켓에 대한 LPWSPEventSelect 지정된 네트워크 이벤트의 연결 및 선택도 취소됩니다. 그러나 Windows 소켓 SPI 클라이언트는 여전히 WSACloseEvent 호출하여 이벤트 개체를 명시적으로 닫고 리소스를 해제해야 합니다.
LPWSPAccept'ed 소켓은 수락하는 데 사용되는 수신 대기 소켓과 동일한 속성을 가지므로 수신 소켓에 대해 설정된 LPWSPEventSelect 연결 및 네트워크 이벤트 선택 집합이 허용된 소켓에 적용됩니다. 예를 들어 수신 소켓이 FD_ACCEPT, FD_READ 및 FD_WRITE
네트워크 이벤트의 발생을 성공적으로 기록하고 연결된 이벤트 개체에 신호를 전송한 후에는 Windows Sockets SPI 클라이언트가 해당 네트워크 이벤트의 설정 및 관련 이벤트 개체의 신호를 암시적으로 다시 사용하도록 설정하는 함수 호출을 수행할 때까지 해당 네트워크 이벤트에 대한 추가 작업이 수행되지 않습니다.
네트워크 이벤트 | 함수 다시 사용 |
---|---|
FD_READ | LPWSPRecv 또는 |
FD_WRITE | LPWSPSend 또는 LPWSPSendTo |
FD_OOB | LPWSPRecv 또는 |
FD_ACCEPT | LPWSPAccept |
FD_CONNECT | 없음 |
FD_CLOSE | 없음 |
FD_QOS | SIO_GET_QOS 사용하여 LPWSPIoctl |
FD_GROUP_QOS | 소켓 그룹에서 나중에 사용하도록 예약됨: SIO_GET_GROUP_QOS LPWSPIoctl |
FD_ROUTING_INTERFACE_CHANGE | 명령 SIO_ROUTING_INTERFACE_CHANGE 사용하여 LPWSPIoctl |
FD_ADDRESS_LIST_CHANGE | 명령 SIO_ADDRESS_LIST_CHANGE 사용하여 LPWSPIoctl |
다시 활성화 루틴에 대한 호출은 실패하더라도 관련 네트워크 이벤트 및 이벤트 개체에 대한 기록 및 신호를 다시 사용하도록 설정합니다.
FD_READ, FD_OOB 및 FD_ACCEPT 네트워크 이벤트의 경우 네트워크 이벤트 기록 및 이벤트 개체 신호는 수준 트리거
- 서비스 공급자는 소켓 100바이트의 데이터를 수신하고, FD_READ 네트워크 이벤트를 기록하고, 연결된 이벤트 개체에 신호를 전송합니다.
- Windows 소켓 SPI 클라이언트는
WSPRecv(s, buffptr, 50, 0)
50바이트를 읽습니다. - 서비스 공급자는 FD_READ 네트워크 이벤트를 기록하고, 읽을 데이터가 계속 있으므로 연결된 이벤트 개체에 다시 신호를 전송합니다.
이러한 의미 체계를 사용하면 Windows Sockets SPI 클라이언트가 FD_READ 네트워크 이벤트에 대한 응답으로 사용 가능한 모든 데이터를 읽을 필요가 없습니다. 대신 각 FD_READ 네트워크 이벤트에 대한 응답으로 단일 LPWSPRecv 적합합니다.
FD_QOS 및 FD_GROUP_QOS 이벤트는 에지 트리거
FD_ROUTING_INTERFACE_CHANGE 및 FD_ADDRESS_LIST_CHANGE 이벤트는 에지 트리거
Windows Sockets SPI 클라이언트가 LPWSPEventSelect
- Windows 소켓 SPI 클라이언트는 LPWSPListen
호출합니다. - 연결 요청이 수신되었지만 아직 수락되지 않았습니다.
- Windows 소켓 SPI 클라이언트는 LPWSPEventSelect 호출하여 소켓에 대한 FD_ACCEPT 네트워크 이벤트에 관심이 있음을 지정합니다. 서비스 공급자는 FD_ACCEPT 네트워크 이벤트를 기록하고 연결된 이벤트 개체에 즉시 신호를 전송합니다.
FD_WRITE 네트워크 이벤트는 약간 다르게 처리됩니다. FD_WRITE 네트워크 이벤트는 소켓이 LPWSPConnect 처음 연결되거나 LPWSPAccept수락된 후 LPWSPSend 또는 LPWSPSendTo 실패하고 버퍼 공간을 사용할 수 있게 되면 기록됩니다. 따라서 Windows Sockets SPI 클라이언트는 첫 번째 FD_WRITE 네트워크 이벤트 설정부터 시작하여 송신이 WSAEWOULDBLOCK을 반환할 때까지 지속될 수 있다고 가정할 수 있습니다. 이러한 오류가 발생하면 Windows Sockets SPI 클라이언트는 FD_WRITE 네트워크 이벤트가 기록되고 연결된 이벤트 개체에 신호를 보낼 때 전송이 다시 가능하다는 것을 알게 됩니다.
FD_OOB 네트워크 이벤트는 소켓이 대역 외 데이터를 개별적으로 수신하도록 구성된 경우에만 사용됩니다. 소켓이 대역 외 데이터를 인라인으로 수신하도록 구성된 경우 대역 외(신속한) 데이터는 일반 데이터로 처리되고 Windows Sockets SPI 클라이언트는 네트워크 이벤트를 FD_OOB FD_READ 네트워크 이벤트에 대한 관심을 등록해야 합니다. Windows 소켓 SPI 클라이언트는
FD_CLOSE 네트워크 이벤트의 오류 코드는 소켓 닫기가 정상인지 아니면 중단되었는지를 나타냅니다. 오류 코드가 0이면 닫기는 정상입니다. 오류 코드가 WSAECONNRESET이면 소켓의 가상 회로가 다시 설정됩니다. 이는 SOCK_STREAM 같은 연결 지향 소켓에만 적용됩니다.
FD_CLOSE 네트워크 이벤트는 소켓에 해당하는 가상 회로에 대한 닫기 표시가 수신될 때 기록됩니다. TCP 용어에서 이는 연결이 FIN WAIT 또는 CLOSE WAIT 상태로 전환될 때 FD_CLOSE 기록됨을 의미합니다. 그러면 원격 엔드가 송신 쪽에서 LPWSPShutdown 수행하거나 LPWSPCloseSocket수행합니다.
서비스 공급자는 가상 회로의 폐쇄를 나타내기 위해 FD_CLOSE 네트워크 이벤트를
FD_QOS 또는 FD_GROUP_QOS 네트워크 이벤트는 소켓 연결된 흐름 사양의 필드 또는 속한 소켓 그룹이 각각 변경된 경우 기록됩니다. 이 변경 내용은 SIO_GET_QOS 및/또는 SIO_GET_GROUP_QOS 있는
FD_ROUTING_INTERFACE_CHANGE 네트워크 이벤트는 WSAIoctl 지정된 대상에 도달하는 데 사용해야 하는 로컬 인터페이스가 이러한 IOCTL이 발급된 후 변경된 SIO_ROUTING_INTERFACE_CHANGE 때 기록됩니다.
FD_ADDRESS_LIST_CHANGE 네트워크 이벤트는 SIO_ADDRESS_LIST_CHANGE 사용하여 WSAIoctl
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 10 빌드 20348 |
지원되는 최소 서버 | Windows 10 빌드 20348 |
헤더 | ws2spi.h |