udp select 예제

Windows CE에서 이러한 예제를 실행하려면 Winsock 코드를 컴파일하는 데 몇 가지 사소한 수정만 필요합니다. 먼저 헤더 파일은 WINSOCK이어야 합니다. H, WINSOCK2반대로. H. WSAStartup()은 Windows CE에서 Winsock의 현재 버전이기 때문에 버전 1.1을 로드해야 합니다. 또한 Windows CE는 콘솔 응용 프로그램을 지원하지 않으므로 main() 대신 WinMain()을 사용해야 합니다. 그렇다고 해서 응용 프로그램에 창을 통합해야 하는 것은 아닙니다. 이는 printf()와 같은 콘솔 텍스트 I/O 기능을 사용할 수 없다는 것을 의미합니다. 마스터 세트가 있는 이유는 select() 실제로 전달할 집합을 변경하여 읽을 준비가 된 소켓을 반영하기 때문입니다. select() 호출에서 다음 호출로의 연결을 추적해야 하므로 이러한 연결을 안전하게 어딘가에 보관해야 합니다. 마지막 순간에 마스터를 read_fds에 복사한 다음 select()를 호출합니다. select() 함수를 사용하는 작업 프로그램 예제의 샘플은 다음과 같습니다.

프로젝트 이름은 UDPServerVer2입니다. 또한 WSAAsyncSelect() 및 WSAEventSelect()를 사용할 때 공유 소켓에 대한 알림과 관련된 몇 가지 문제에 유의하십시오. 공유 설명자 중 하나를 사용하여 이러한 호출을 실행하면 해당 등록에 사용된 설명자가 무엇이든 관계없이 소켓에 대한 이전 이벤트 등록이 취소됩니다. 예를 들어 공유 소켓은 B를 처리하는 A 및 FD_WRITE 이벤트를 처리하기 위해 FD_READ 이벤트를 제공할 수 없습니다. 두 설명자 모두에 이벤트 알림이 필요한 경우 프로세스 대신 스레드를 사용할 수 있도록 응용 프로그램 디자인을 다시 고려해야 합니다. 두 소켓 설명자는 I/O. Winsock에 대해 독립적으로 사용할 수 있지만 액세스 제어는 제공하지 않으므로 프로그래머가 일종의 동기화를 적용하는 것은 프로그래머의 결정입니다. 소켓 설명자가 실제 소켓이 아니라 중복되기 때문에 소켓과 관련된 모든 상태 정보는 모든 설명자에서 공통으로 유지됩니다.

예를 들어 설명자 중 하나에 setockopt() 함수에 의해 설정된 모든 소켓 옵션은 이후 모든 설명자에서 getsockopt() 함수를 사용하여 표시됩니다. 프로세스가 중복된 소켓에서 closesocket()을 호출하면 해당 프로세스의 설명자가 할당 해제됩니다.