winsock select 예제

선택 함수는 하나 이상의 소켓의 상태를 결정하는 데 사용됩니다. 각 소켓에 대해 호출자는 읽기, 쓰기 또는 오류 상태에 대한 정보를 요청할 수 있습니다. 지정된 상태가 요청되는 소켓 집합은 fd_set 구조로 표시됩니다. fd_set 구조에 포함된 소켓은 단일 서비스 공급자와 연결되어야 합니다. 이러한 제한을 위해 해당 프로토콜을 설명하는 WSAPROTOCOL_INFO 구조가 동일한 providerId 값을 가지는 경우 소켓은 동일한 서비스 공급자의 것으로 간주됩니다. 반환시 구조는 지정된 조건을 충족하는 이러한 소켓의 하위 집합을 반영하도록 업데이트됩니다. 선택 함수는 조건을 충족하는 소켓 수를 반환합니다. fd_set 구조를 조작하기 위해 매크로 집합이 제공됩니다. 이러한 매크로는 버클리 소프트웨어에서 사용되는 매크로와 호환되지만 기본 표현은 완전히 다릅니다. 첫 번째 매개 변수는 더미 매개 변수입니다.

readfds 매개 변수는 읽을 수 있도록 모니터링해야 하는 소켓 배열에 대한 포인터입니다. 즉, readfds 집합의 소켓이 일부 데이터를 수신하면 읽을 수 있습니다. 마찬가지로 writefds 소켓은 쓰기 가 용이하도록 모니터링되고 제외 된 소켓은 오류가 있는지 모니터링해야합니다. 마지막 매개 변수는 시간 시간 매개 변수로, 이는 선택 함수가 반환하기 전에 기다려야 하는 시간의 길이를 나타냅니다. 폴링과 같은 다른 기술이 있습니다. 폴링은 여러 소켓을 모니터링하여 “무언가”가 발생했는지 확인하는 것입니다. 예를 들어 서버는 연결된 5개의 클라이언트의 소켓을 모니터링할 수 있으며, 그 중 어느 클라이언트가 메시지를 보내자마자 서버가 이벤트에 대한 알림을 받은 다음 처리합니다. 이러한 방식으로 여러 소켓을 처리할 수 있습니다.

winsock API는 일부 활동에 대해 여러 소켓을 모니터링할 수 있는 “select”라는 함수를 제공합니다. 다음은 AcceptConnections() 함수입니다. 이 함수는 select()를 사용하여 소켓을 모니터링합니다. 또한 소켓의 상태에 따라 처리됩니다. 좋은, 아주 좋은. 이틀 후 그런 일을하는 방법을 보여주는 몇 가지 C 예를 찾으려고 (놀랍게도 드문, 이러한 일이 얼마나 많은 일을 고려!) 이것은 CodeBlocks 16.01에서 빌드되고 실행되었지만 프로젝트 빌드 옵션에 추가 할 라이브러리 연결을 파악한 후에는 잘 됩니다. (.. .. .. .. MinGWlib2_32.a) 릴리스 및 디버그 컨텍스트모두에서 Windows 7 Pro 64 비트에서 C::B 16.01을 사용합니다.

(결과 exe는 크기가 10k에 불과합니다!) 이 문서는 IOCP에 내 기사의 연속이다. 이 문서에서는 확장 가능한 클라이언트/서버 응용 프로그램을 만들기 위해 I/O 완료 포트를 사용하는 방법을 설명했습니다. 이 문서에서는 select() 함수를 사용하여 확장 가능한 클라이언트/서버 응용 프로그램을 만드는 방법을 설명합니다. 이 구현에서 클라이언트와 서버는 간단한 문자열 메시지를 보내고 표시합니다. select() 함수를 사용하면 개발자가 세 가지 집합으로 소켓을 할당할 수 있으며 상태 변경에 대한 소켓을 모니터링합니다.