WSAAsyncSelect 함수(winsock.h)

[ WSAAsyncSelect 함수는 요구 사항 섹션에 지정된 운영 체제에서 사용할 수 있습니다. 이후 버전에서는 변경되거나 제공되지 않을 수 있습니다. Select 스타일 I/O를 사용하는 대신 WinSock2 에서 겹치는 I/O 및 이벤트 개체 를 사용합니다.]

WSAAsyncSelect 함수는 소켓에 대한 네트워크 이벤트의 Windows 메시지 기반 알림을 요청합니다.

구문

int WSAAsyncSelect(
  [in] SOCKET s,
  [in] HWND   hWnd,
  [in] u_int  wMsg,
  [in] long   lEvent
);

매개 변수

[in] s

이벤트 알림이 필요한 소켓을 식별하는 설명자입니다.

[in] hWnd

네트워크 이벤트가 발생할 때 메시지를 받을 창을 식별하는 핸들입니다.

[in] wMsg

네트워크 이벤트가 발생할 때 수신할 메시지입니다.

[in] lEvent

애플리케이션에 관심이 있는 네트워크 이벤트의 조합을 지정하는 비트 마스크입니다.

반환 값

WSAAsyncSelect 함수가 성공하면 네트워크 이벤트 집합에 대한 애플리케이션의 관심 선언이 성공한 경우 반환 값은 0입니다. 그렇지 않으면 SOCKET_ERROR 값이 반환되고 WSAGetLastError를 호출하여 특정 오류 번호를 검색할 수 있습니다.

오류 코드 의미
WSANOTINITIALISED
이 함수를 사용하기 전에 성공적인 WSAStartup 호출이 발생해야 합니다.
WSAENETDOWN
네트워크 하위 시스템이 실패했습니다.
WSAEINVAL
창 핸들이 기존 창을 참조하지 않거나 지정된 소켓이 잘못된 상태인 등 지정된 매개 변수 중 하나가 잘못되었습니다.
WSAEINPROGRESS
차단 Windows 소켓 1.1 호출이 진행 중이거나 서비스 공급자가 여전히 콜백 함수를 처리하고 있습니다.
WSAENOTSOCK
설명자가 소켓이 아닙니다.
 

애플리케이션 창에서 메시지를 받으면 추가 오류 코드를 설정할 수 있습니다. 이 오류 코드는 WSAGETSELECTERROR 매크로를 사용하여 회신 메시지의 lParam에서 추출됩니다. 각 네트워크 이벤트에 대한 가능한 오류 코드는 다음 표에 나와 있습니다.

이벤트: FD_CONNECT

오류 코드 의미
WSAEAFNOSUPPORT 지정된 패밀리의 주소는 이 소켓에서 사용할 수 없습니다.
WSAECONNREFUSED 연결 시도가 거부되었습니다.
WSAENETUNREACH 현재 이 호스트에서 네트워크에 연결할 수 없습니다.
WSAEFAULT namelen 매개 변수가 잘못되었습니다.
WSAEINVAL 소켓이 이미 주소에 바인딩되어 있습니다.
WSAEISCONN 소켓이 이미 연결되어 있습니다.
WSAEMFILE 사용 가능한 추가 파일 설명자가 없습니다.
WSAENOBUFS 사용할 수 있는 버퍼 공간이 없습니다. 소켓을 연결할 수 없습니다.
WSAENOTCONN 소켓이 연결되지 않았습니다.
WSAETIMEDOUT 연결을 설정하지 않고 연결 시간이 초과되었습니다.
 

이벤트: FD_CLOSE

오류 코드 의미
WSAENETDOWN 네트워크 하위 시스템이 실패했습니다.
WSAECONNRESET 원격 쪽에서 연결을 다시 설정했습니다.
WSAECONNABORTED 제한 시간 또는 기타 오류로 인해 연결이 종료되었습니다.
 
오류 코드 의미
WSAENETDOWN 네트워크 하위 시스템이 실패했습니다.
 

이벤트: FD_ROUTING_INTERFACE_CHANGE

오류 코드 의미
WSAENETUNREACH 지정된 대상에 더 이상 연결할 수 없습니다.
WSAENETDOWN 네트워크 하위 시스템이 실패했습니다.

설명

WSAAsyncSelect 함수는 WS2_32.DLL lEvent 매개 변수로 지정된 네트워크 이벤트를 검색할 때 hWnd 창에 메시지를 보내도록 요청하는 데 사용됩니다. 전송해야 하는 메시지는 wMsg 매개 변수에 의해 지정됩니다. 알림이 필요한 소켓은 s 매개 변수로 식별됩니다.

WSAAsyncSelect 함수는 lEvent 값에 관계없이 소켓 차단 해제 모드로 자동으로 설정합니다. 소켓 다시 차단 모드로 설정하려면 먼저 lEvent가 0으로 설정된 WSAAsyncSelect 호출을 통해 소켓과 연결된 이벤트 레코드를 지워야 합니다. 그런 다음 ioctlsocket 또는 WSAIoctl 을 호출하여 소켓을 다시 차단 모드로 설정할 수 있습니다. 차단 해제 소켓을 차단 모드로 다시 설정하는 방법에 대한 자세한 내용은 ioctlsocketWSAIoctl 함수를 참조하세요.

lEvent 매개 변수는 다음 표에 나열된 값이 있는 비트 OR 연산자를 사용하여 생성됩니다.

의미
FD_READ 읽기 준비 상태 알림을 받도록 설정합니다.
FD_WRITE 쓰기 준비 상태 알림을 받으려고 합니다.
FD_OOB OOB 데이터 도착 알림을 받으려고 합니다.
FD_ACCEPT 들어오는 연결에 대한 알림을 받으려고 합니다.
FD_CONNECT 완료된 연결 또는 멀티포인트 조인 작업에 대한 알림을 받으려고 합니다.
FD_CLOSE 소켓 폐쇄 알림을 받으려고 합니다.
FD_QOS 소켓 QoS(서비스 품질) 변경에 대한 알림을 받으려고 합니다.
FD_GROUP_QOS 소켓 그룹 QoS(서비스 품질) 변경에 대한 알림을 받으려고 합니다(나중에 소켓 그룹과 함께 사용할 수 있도록 예약됨). 예약되어 있습니다.
FD_ROUTING_INTERFACE_CHANGE 지정된 대상에 대한 라우팅 인터페이스 변경에 대한 알림을 받으려고 합니다.
FD_ADDRESS_LIST_CHANGE 소켓 프로토콜 패밀리에 대한 로컬 주소 목록 변경에 대한 알림을 받으려고 합니다.
 

소켓에 대해 WSAAsyncSelect 를 실행하면 동일한 소켓에 대해 이전 WSAAsyncSelect 또는 WSAEventSelect 가 취소됩니다. 예를 들어 읽기 및 쓰기 모두에 대한 알림을 받으려면 애플리케이션은 다음과 같이 FD_READFD_WRITE 모두 사용하여 WSAAsyncSelect를 호출해야 합니다.

rc = WSAAsyncSelect(s, hWnd, wMsg, FD_READ|FD_WRITE);

다른 이벤트에 대해 다른 메시지를 지정할 수 없습니다. 다음 코드는 작동하지 않습니다. 두 번째 호출은 첫 번째의 효과를 취소하고 FD_WRITE 이벤트만 wMsg2 메시지와 함께 보고됩니다.

rc = WSAAsyncSelect(s, hWnd, wMsg1, FD_READ);
rc = WSAAsyncSelect(s, hWnd, wMsg2, FD_WRITE);

Windows 소켓이 소켓의 네트워크 이벤트와 관련된 메시지를 더 이상 보내지 않아야 함을 나타내는 모든 알림을 취소하려면 lEvent 가 0으로 설정됩니다.

rc = WSAAsyncSelect(s, hWnd, 0, 0);

WSAAsyncSelect는 이 instance 소켓에 대한 이벤트 메시지 게시를 즉시 사용하지 않도록 설정하지만 애플리케이션 메시지 큐에서 메시지가 대기 중일 수 있습니다. 따라서 취소 후에도 네트워크 이벤트 메시지를 받을 수 있도록 애플리케이션을 준비해야 합니다. closesocket을 사용하여 소켓을 닫으면 WSAAsyncSelect 메시지 전송도 취소되지만 큐의 메시지에 대한 동일한 주의 사항이 계속 적용됩니다.

accept 함수에서 만든 소켓에는 수락 하는 데 사용되는 수신 대기 소켓과 동일한 속성이 있습니다. 따라서 수신 대기 소켓에 대해 설정된 WSAAsyncSelect 이벤트도 허용된 소켓에도 적용됩니다. 예를 들어 수신 대기 소켓에 FD_ACCEPT, FD_READ FD_WRITE WSAAsyncSelect 이벤트가 있는 경우 해당 수신 대기 소켓에서 허용되는 모든 소켓에는 메시지에 사용되는 wMsg 값이 동일한 FD_ACCEPT, FD_READFD_WRITE 이벤트도 있습니다. 다른 wMsg 또는 이벤트가 필요한 경우 애플리케이션은 WSAAsyncSelect를 호출하여 허용된 소켓 및 원하는 새 데이터를 전달해야 합니다.

지정된 소켓에서 지정된 네트워크 이벤트 중 하나가 발생하면 애플리케이션 창 hWndwMsg 메시지를 받습니다. wParam 매개 변수는 네트워크 이벤트가 발생한 소켓을 식별합니다. lParam의 하위 단어는 발생한 네트워크 이벤트를 지정합니다. lParam의 상위 단어에는 오류 코드가 포함되어 있습니다. 오류 코드는 Winsock2.h에 정의된 모든 오류입니다.

참고 이벤트 알림 메시지가 수신되면 반환되는 오류 값이 lParam의 상위 단어 값과 다를 수 있으므로 WSAGetLastError 함수를 사용하여 오류 값을 검사 수 없습니다.
 
오류 및 이벤트 코드는 Winsock2.h에 다음과 같이 정의된 WSAGETSELECTERRORWSAGETSELECTEVENT 매크로를 사용하여 lParam에서 추출할 수 있습니다.
#include <windows.h>

#define WSAGETSELECTEVENT(lParam)       LOWORD(lParam)
#define WSAGETSELECTERROR(lParam)       HIWORD(lParam)

이러한 매크로를 사용하면 애플리케이션에 대한 소스 코드의 이식성을 최대화할 수 있습니다.

반환할 수 있는 가능한 네트워크 이벤트 코드는 다음 표에 나와 있습니다.

의미
FD_READ 소켓 읽기 가 준비되었습니다.
FD_WRITE 소켓 작성할 준비가 된 경우
FD_OOB 소켓에서 읽을 준비가 된 OOB 데이터
FD_ACCEPT 새 들어오는 연결을 수락할 준비가 된 소켓 입니다 .
FD_CONNECT 소켓 완료 시 시작된 연결 또는 다중 포인트 인 작업입니다.
FD_CLOSE 소켓 s 로 식별된 연결이 닫혔습니다.
FD_QOS 소켓과 연결된 서비스 품질이 변경되었습니다.
FD_GROUP_QOS 예약되어 있습니다. 가 속한 소켓 그룹과 연결된 서비스 품질이 변경되었습니다(나중에 소켓 그룹과 함께 사용할 수 있도록 예약됨).
FD_ROUTING_INTERFACE_CHANGE 지정된 대상으로 보내는 데 사용해야 하는 로컬 인터페이스가 변경되었습니다.
FD_ADDRESS_LIST_CHANGE 애플리케이션 클라이언트가 바인딩할 수 있는 소켓 프로토콜 패밀리의 주소 목록이 변경되었습니다.
 

여러 이벤트에 관심을 가지고 WSAAsyncSelect 를 호출할 수 있지만 애플리케이션 창은 각 네트워크 이벤트에 대한 단일 메시지를 받습니다.

select 함수의 경우와 마찬가지로 WSAAsyncSelect는 데이터 전송 작업(송신 또는 사각형)이 즉시 성공할 것으로 예상할 수 있는 시기를 결정하는 데 자주 사용됩니다. 그럼에도 불구하고 강력한 애플리케이션은 메시지를 수신하고 WSAEWOULDBLOCK 을 즉시 반환하는 Windows Sockets 2 호출을 실행할 수 있는 가능성에 대비해야 합니다. 예를 들어 다음과 같은 이벤트 시퀀스가 가능합니다.

  1. 데이터가 소켓 s에 도착 합니다. Windows 소켓 2 게시물 WSAAsyncSelect 메시지
  2. 애플리케이션이 다른 메시지를 처리합니다.
  3. 처리하는 동안 애플리케이션이 을 ioctlsocket(s, FIONREAD...) 발급하고 데이터를 읽을 준비가 되었다는 것을 알 수 있습니다.
  4. 애플리케이션이 을 recv(s,...) 발급하여 데이터를 읽습니다.
  5. 애플리케이션이 다음 메시지를 처리하기 위해 반복되고, 결국 데이터를 읽을 준비가 되었음을 나타내는 WSAAsyncSelect 메시지에 도달합니다.
  6. WSAEWOULDBLOCK 오류로 인해 실패하는 애플리케이션 문제recv(s,...).
다른 시퀀스도 가능합니다.

WS2_32.DLL 특정 네트워크 이벤트에 대한 메시지로 애플리케이션을 지속적으로 플러시하지 않습니다. 애플리케이션 창에 특정 이벤트에 대한 알림을 성공적으로 게시한 후에는 애플리케이션이 해당 네트워크 이벤트에 대한 알림을 암시적으로 다시 활성화하는 함수 호출을 할 때까지 해당 네트워크 이벤트에 대한 추가 메시지가 애플리케이션 창에 게시되지 않습니다.

이벤트 다시 설정 함수
FD_READ recv, recvfrom, WSARecv 또는 WSARecvFrom.
FD_WRITE send, sendto, WSASend 또는 WSASendTo.
FD_OOB recv, recvfrom, WSARecv 또는 WSARecvFrom.
FD_ACCEPT 조건 함수가 CF_DEFER 반환했음을 나타내는 오류 코드가 WSATRY_AGAIN 않는 한 accept 또는 WSAAccept입니다.
FD_CONNECT 없음
FD_CLOSE 없음
FD_QOS 명령 SIO_GET_QOS WSAIoctl.
FD_GROUP_QOS 예약되어 있습니다. 명령 SIO_GET_GROUP_QOS WSAIoctl(나중에 소켓 그룹에서 사용하도록 예약됨).
FD_ROUTING_INTERFACE_CHANGE 명령 SIO_ROUTING_INTERFACE_CHANGE WSAIoctl.
FD_ADDRESS_LIST_CHANGE 명령 SIO_ADDRESS_LIST_CHANGE WSAIoctl.
 

다시 시작 루틴에 대한 호출이 실패하더라도 관련 이벤트에 대한 메시지 게시가 다시 시작됩니다.

FD_READ, FD_OOBFD_ACCEPT 이벤트의 경우 메시지 게시가 수준 트리거됩니다. 즉, 재시도 루틴이 호출되고 호출 후에도 관련 조건이 여전히 충족되는 경우 WSAAsyncSelect 메시지가 애플리케이션에 게시됩니다. 이렇게 하면 애플리케이션이 이벤트 기반이 되며 한 번에 도착하는 데이터의 양과 관련이 없습니다. 다음과 같은 시퀀스를 고려해 보세요.

  1. 네트워크 전송 스택은 소켓 s 에서 100바이트의 데이터를 수신하고 Windows 소켓 2에서 FD_READ 메시지를 게시합니다.
  2. 애플리케이션은 50바이트를 읽기 위해 recv( s, buffptr, 50, 0)를 발급합니다.
  3. 읽을 데이터가 아직 없으므로 다른 FD_READ 메시지가 게시됩니다.
이러한 의미 체계를 사용하면 애플리케이션이 FD_READ 메시지에 대한 응답으로 사용 가능한 모든 데이터를 읽을 필요가 없습니다. 각 FD_READ 메시지에 대한 응답으로 단일 사각형이 적절합니다. 애플리케이션이 단일 FD_READ 대한 응답으로 여러 recv 호출을 발급하는 경우 여러 FD_READ 메시지를 받을 수 있습니다. 이러한 애플리케이션은 FD_READ 이벤트가 설정되지 않은 WSAAsyncSelect를 호출하여 recv 호출을 시작하기 전에 FD_READ 메시지를 사용하지 않도록 설정해야 할 수 있습니다.

FD_QOSFD_GROUP_QOS 이벤트는 에지 트리거로 간주됩니다. 서비스 품질 변경이 발생할 때 메시지가 정확히 한 번 게시됩니다. 공급자가 서비스 품질의 추가 변화를 감지하거나 애플리케이션이 소켓에 대한 서비스 품질을 재협상할 때까지 추가 메시지는 나오지 않습니다.

FD_ROUTING_INTERFACE_CHANGE 메시지는 WSAIoctl에 지정된 대상에 도달하는 데 사용해야 하는 로컬 인터페이스가 해당 IOCTL이 발급된 후 SIO_ROUTING_INTERFACE_CHANGE 변경된 경우에 게시됩니다.

FD_ADDRESS_LIST_CHANGE 메시지는 SIO_ADDRESS_LIST_CHANGE 사용하여 WSAIoctl이 실행된 후 애플리케이션이 변경 내용을 바인딩할 수 있는 주소 목록이 게시될 때 게시됩니다.

애플리케이션이 WSAAsyncSelect 를 호출하거나 다시 실행 함수가 호출될 때 이벤트가 발생한 경우 메시지가 적절하게 게시됩니다. 예를 들어 다음 시퀀스를 살펴봅니다.

  1. 애플리케이션이 수신 대기를 호출합니다.
  2. 연결 요청이 수신되었지만 아직 수락되지 않았습니다.
  3. 애플리케이션은 소켓에 대한 FD_ACCEPT 메시지를 수신해야 하므로 WSAAsyncSelect를 호출합니다. 이벤트의 지속성으로 인해 Windows 소켓 2는 즉시 FD_ACCEPT 메시지를 게시합니다.

FD_WRITE 이벤트는 약간 다르게 처리됩니다. FD_WRITE 메시지는 소켓이 connect 또는 WSAConnect에 처음 연결되거나(FD_CONNECT 후 등록한 경우) 수락 또는 WSAAccept로 수락된 후 WSAEWOULDBLOCK으로 보내기 작업이 실패하고 버퍼 공간을 사용할 수 있게 되면 게시됩니다. 따라서 애플리케이션은 첫 번째 FD_WRITE 메시지에서 시작하여 보내기가 WSAEWOULDBLOCK을 반환할 때까지 전송이 지속될 수 있다고 가정할 수 있습니다. 이러한 오류가 발생하면 FD_WRITE 메시지와 함께 전송이 다시 가능하다는 알림이 애플리케이션에 표시됩니다.

FD_OOB 이벤트는 소켓이 OOB 데이터를 개별적으로 수신하도록 구성된 경우에만 사용됩니다. 소켓이 OOB 데이터를 인라인으로 수신하도록 구성된 경우 OOB(긴급) 데이터는 일반 데이터로 처리되고 애플리케이션은 FD_OOB 이벤트가 아닌FD_READ 이벤트를 수신해야 합니다. 애플리케이션은 SO_OOBINLINE 옵션에 대해 setsockopt 또는 getsockopt 를 사용하여 OOB 데이터를 처리하는 방법을 설정하거나 검사 수 있습니다.

FD_CLOSE 메시지의 오류 코드는 소켓 닫기가 정상인지 중단되었는지 여부를 나타냅니다. 오류 코드가 0이면 닫기는 정상입니다. 오류 코드가 WSAECONNRESET이면 소켓의 가상 회로가 다시 설정되었습니다. 이는 SOCK_STREAM 같은 연결 지향 소켓에만 적용됩니다.

FD_CLOSE 메시지는 소켓에 해당하는 가상 회로에 대한 닫기 표시가 수신될 때 게시됩니다. TCP 용어에서 이는 연결이 TIME WAIT 또는 CLOSE WAIT 상태로 전환될 때 FD_CLOSE 게시됨을 의미합니다. 이로 인해 원격 엔드가 송신 쪽 또는 closesocket에서 종료를 수행합니다. FD_CLOSE 소켓에서 모든 데이터를 읽은 후에만 게시해야 하지만 애플리케이션은 데이터 손실 가능성을 방지하기 위해 FD_CLOSE 수신 시 남은 데이터에 대해 검사 합니다.

애플리케이션은 가상 회로의 닫기를 나타내는 FD_CLOSE 메시지만 수신하며, 수신된 모든 데이터를 읽은 경우에만 정상적으로 종료됩니다. 이 조건을 나타내는 FD_READ 메시지를 받지 않습니다.

FD_QOS 또는 FD_GROUP_QOS 메시지는 소켓 s 또는 에 속한 소켓 그룹과 연결된 흐름 사양 매개 변수가 각각 변경될 때 게시됩니다. 애플리케이션은 명령 SIO_GET_QOS 또는 SIO_GET_GROUP_QOS WSAIoctl 을 사용하여 소켓 또는켓 그룹의 현재 서비스 품질을 각각 가져와야 합니다.

FD_ROUTING_INTERFACE_CHANGEFD_ADDRESS_LIST_CHANGE 이벤트도 에지 트리거로 간주됩니다. 애플리케이션이 SIO_ROUTING_INTERFACE_CHANGE 또는 SIO_ADDRESS_LIST_CHANGE 함께 WSAIoctl 을 실행하여 알림을 요청한 후 변경이 발생하면 메시지가 정확히 한 번 게시됩니다. 애플리케이션이 IOCTL을 재발행하고 IOCTL이 발급되었기 때문에 다른 변경 내용이 감지될 때까지 추가 메시지는 나오지 않습니다.

다음은 각 비동기 알림 메시지의 이벤트 및 조건에 대한 요약입니다.

  • FD_READ:
    1. WSAAsyncSelect가 호출될 때 현재 받을 수 있는 데이터가 있는 경우 입니다.
    2. 데이터가 도착하면 FD_READ 아직 게시되지 않은 경우 입니다.
    3. 데이터를 계속 받을 수 있는 경우 recv 또는 recvfrom 이 호출된 후 MSG_PEEK 유무에 관계없이).
      참고setsockopt SO_OOBINLINE 사용하도록 설정하면 데이터에는 위에서 설명한 인스턴스의 일반 데이터와 OOB 데이터가 모두 포함됩니다.
       
  • FD_WRITE:
    1. WSAAsyncSelect가 호출될 때 송신 또는 송신 가능한 경우 입니다.
    2. 연결 또는 수락 후 연결이 설정된 경우 호출됩니다.
    3. WSAEWOULDBLOCK으로 송신 또는 송신이 실패하면 send 또는 sendto가 성공할 가능성이 높습니다.
    4. 연결 없는 소켓에 바인딩 한 후 FD_WRITE 현재 발생하거나 발생하지 않을 수 있습니다(구현 종속). 어쨌든 연결 없는 소켓은 바인딩 작업 직후에 항상 쓸 수 있습니다.
  • FD_OOB: setsockopt SO_OOBINLINE 사용하지 않도록 설정된 경우에만 유효합니다(기본값).
    1. WSAAsyncSelect가 호출될 때 현재 MSG_OOB 플래그를 사용하여 수신할 수 있는 OOB 데이터가 있는 경우 입니다.
    2. OOB 데이터가 도착하면 FD_OOB 아직 게시되지 않은 경우 입니다.
    3. MSG_OOB 플래그를 사용하거나 사용하지 않고 recv 또는 recvfrom 을 호출한 후 OOB 데이터를 계속 받을 수 있는 경우 입니다.
  • FD_ACCEPT:
    1. WSAAsyncSelect가 호출될 때 현재 수락할 수 있는 연결 요청이 있는 경우 입니다.
    2. 연결 요청이 도착하면 FD_ACCEPT 아직 게시되지 않은 경우 입니다.
    3. 수락 후 호출된 후 수락할 수 있는 다른 연결 요청이 있는 경우 입니다.
  • FD_CONNECT:
    1. WSAAsyncSelect가 호출될 때 현재 연결이 설정된 경우 입니다.
    2. 연결이 호출된 후 데이터그램 소켓에서 일반적인 것처럼 연결이 즉시 성공하더라도 연결이 설정될 때입니다.
    3. WSAJoinLeaf를 호출한 후 조인 작업이 완료되면 입니다.
    4. 연결WSAConnect 또는 WSAJoinLeaf가 차단되지 않는 연결 지향 소켓을 사용하여 호출되었습니다. 초기 작업은 WSAEWOULDBLOCK의 특정 오류와 함께 반환되었지만 네트워크 작업이 진행되었습니다. 작업이 결국 성공하는지 여부, 결과가 결정되면 FD_CONNECT 발생합니다. 클라이언트는 오류 코드를 검사 결과가 성공했는지 또는 실패했는지 확인해야 합니다.
  • FD_CLOSE: 연결 지향 소켓(예: SOCK_STREAM)에서만 유효합니다.
    1. WSAAsyncSelect가 호출될 때 소켓 연결이 닫힌 경우 입니다.
    2. 원격 시스템이 정상적으로 종료된 후 현재 받을 수 있는 데이터가 없는 경우(원격 시스템이 정상 종료를 시작할 때 데이터를 수신하고 읽기를 기다리는 경우 보류 중인 모든 데이터를 읽을 때까지 FD_CLOSE 배달되지 않음).
    3. 로컬 시스템이 종료 로 정상적으로 종료를 시작한 후 원격 시스템이 현재 받을 수 있는 데이터가 없는 경우 "데이터 종료" 알림(예: TCP FIN)으로 응답했습니다.
    4. 원격 시스템이 연결을 종료하는 경우(예: 전송된 TCP RST) lParam 에는 WSAECONNRESET 오류 값이 포함됩니다.
      closesocket이 호출된 후에는 FD_CLOSE 게시되지 않습니다.
       
  • FD_QOS:
    1. WSAAsyncSelect가 호출될 때 소켓과 연결된 서비스 품질이 변경된 경우 입니다.
    2. SIO_GET_QOS 호출된 WSAIoctl 이후 서비스 품질이 변경되면 입니다.
  • FD_GROUP_QOS: 예약됨.
  • FD_ROUTING_INTERFACE_CHANGE:
    • SIO_ROUTING_INTERFACE_CHANGE 호출된 WSAIoctl 이후 IOCTL에 지정된 대상에 도달하는 데 사용해야 하는 로컬 인터페이스가 변경되는 경우
  • FD_ADDRESS_LIST_CHANGE:
    • SIO_ADDRESS_LIST_CHANGE 호출된 WSAIoctl 이후 애플리케이션이 바인딩할 수 있는 로컬 주소 목록이 변경되는 경우

요구 사항

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

추가 정보

WSAEventSelect

Winsock 함수

Winsock 참조

선택