wsaeventselect 예제

소켓에 대해 WSAEventSelect를 발급하는 것은 동일한 소켓에 대해 이전 WSAAsyncSelect 또는 WSAEventSelect를 취소하고 내부 네트워크 이벤트 레코드를 지웁히 합니다. 예를 들어 이벤트 개체를 읽기 및 쓰기 네트워크 이벤트 와 연결하려면 응용 프로그램이 다음과 같이 WSAEventSelect를 FD_READ 및 FD_WRITE로 호출해야 합니다. 함수를 반환하는 이벤트 개체를 나타내는 값을 반환합니다. 따라서 응용 프로그램은 이벤트 배열에서 신호된 이벤트를 참조하고 이벤트와 연결된 소켓과 일치시켜 특정 소켓에서 사용할 수 있는 네트워크 이벤트 유형을 결정할 수 있습니다. 이벤트 배열에서 이벤트를 참조할 때 WSAWaitForMultipleEvents() 반환 값에서 미리 정의된 WSA_WAIT_EVENT_0을 뺀 반환 값을 사용하여 이벤트를 참조해야 합니다. 예: 연결없는 소켓(예: SOCK_DGRAM 유형)의 경우 connect()에서 수행하는 작업은 후속 send()/WSASend() 및 recv()/WSARecv() 호출에 사용할 수 있는 기본 대상 주소를 설정하는 것입니다. 지정된 대상 주소 이외의 주소에서 수신된 모든 데이터그램은 삭제됩니다. 이름으로 지정된 구조의 주소 멤버가 모두 0이면 소켓의 연결이 끊어집니다. 그런 다음 기본 원격 주소가 확정되지 않으므로 send()/WSASend() 및 recv()/WSARecv() 호출은 오류 코드 WSAENOTCONN을 반환합니다. 그러나 sendto()/WSASendTo() 및 recvfrom()/WSARecvFrom()는 여전히 사용할 수 있습니다. 소켓이 이미 연결되어 있더라도 연결을 다시 호출하기만 하면 기본 대상을 변경할 수 있습니다.

이름이 이전 연결과 다른 경우 수신대기 중인 모든 데이터그램은 삭제됩니다. 다른 컴퓨터에서 클라이언트 프로그램을 실행하고 그에 따라 서버 IP 주소를 변경하십시오. 이 메모의 끝에 는 보다 유연한 클라이언트-서버 프로그램 예제가 제공됩니다. 이제 사용하려는 이벤트가 설정되었으므로 이를 기다리고 처리하는 방법이 필요합니다. 이벤트는 실제로 그냥 일반 Win32 이벤트 그들을 핸들 을 만드는. 이러한 이벤트가 발생할 때까지 기다리는 데 사용할 수 있는 함수는 WSAWaitForMultipleEvents(…)입니다. 이 함수는 처리 중인 네트워크 이벤트가 발생할 때까지 스레드가 절전 모드로 연결됩니다. 예를 들어 iErrorCode 매개 변수는 lNetworkEvents의 이벤트와 연결된 오류 코드 배열입니다. 각 네트워크 이벤트 유형에 대해 이벤트 이름에 추가된 추가 “_BIT” 문자열을 제외하고 이벤트 유형 이름과 유사한 특수 이벤트 인덱스가 있습니다. 예를 들어 FD_READ 이벤트 형식의 경우 iErrorCode 배열의 인덱스 식별자는 FD_READ_BIT로 지정됩니다. 다음 코드 조각은 FD_READ 이벤트에 대해 이를 보여 줍니다: 선택 및 WSAAsyncSelect 함수의 경우와 마찬가지로 WSAEventSelect는 데이터 전송 작업(송신 또는 recv)이 예상되는 경우를 결정하는 데 자주 사용됩니다. 즉각적인 성공을 거둘 수 있습니다.

그럼에도 불구 하 고 강력한 응용 프로그램 이벤트 개체가 설정 되 고 WSAEWOULDBLOCK 즉시 반환 하는 Windows 소켓 호출을 발급 하는 가능성에 대 한 준비 해야 합니다. 예를 들어 다음 작업 순서가 가능합니다: 이 코드에서는 보내고 받는 바이트 수를 추적하는 데 두 개의 정수가 사용됩니다. send() 및 recv() 함수는 각각 보내거나 받은 바이트 수의 정수 값 또는 오류를 반환합니다. 또한 각 함수는 활성 소켓, char 버퍼 및 송신 또는 수신할 바이트 수와 사용할 플래그와 같은 매개 변수를 사용합니다. 사용자 데이터그램 프로토콜(UDP)과 같이 연결되지 않은 소켓에 recvfrom() 및 sendto() 함수를 사용합니다. 다음은 클라이언트 및 서버 프로그램 예제에 대한 데이터를 완전히 보내고, 받고, 읽는 것입니다. 첫째로 우리는 연결을 듣고 서버 프로그램을 실행합니다. 응용 프로그램에서 WSAEventSelect를 호출하거나 다시 활성화 함수를 호출할 때 네트워크 이벤트가 이미 발생한 경우 네트워크 이벤트가 기록되고 연결된 이벤트 개체가 적절하게 설정됩니다.

This entry was posted in Uncategorized by admin. Bookmark the permalink.

Comments are closed.