socket select 예제

rc = 선택(sd2+1, read_fd, NULL, NULL, 및 시간 시간); 소켓 설명자가 읽기 / 쓰기 준비가되어 있는지 확인이 튜토리얼에서 우리는 선택 방법 접근 방식을 사용한다. 선택 기능을 사용하면 프로그램이 특정 “활동”이 발생하도록 여러 소켓을 모니터링할 수 있습니다. 예를 들어 선택된 소켓 중 하나에서 읽을 데이터가 있는 경우 해당 정보를 제공합니다. 좋은 기사이지만 max_client를 할당하는 “소켓 배열에 새 소켓추가”에 문제가 되지 않습니까? 즉, “i = max_client;”를 설정하면 소켓 번호가 max_client보다 작은 클라이언트가 이전에 연결이 끊어지는 경우 어떻게 해야 합니까? 그런 다음 루프에서 0과 동일한 client_socket[i]에서 찾을 수 있습니다. 그런 다음 해당 위치에 새 소켓을 추가하고 max_client를 해당 소켓에 할당합니다. 그러나 ID가 더 높은 소켓은 여전히 사용할 수 있습니다. select() 함수는 여러 소켓을 동시에 확인하여 recv()d가 대기 중인지 또는 차단 없이 데이터를 보낼 수 있는지 또는 일부 예외가 발생했는지 확인할 수 있는 방법을 제공합니다. if (선택 (fdmax +1, & read_fds, NULL, NULL, NULL) == -1) 그럼 난 당신이 GeeksForGeeks에이 문서를 쓴 사람이야 가정 http://www.geeksforgeeks.org/socket-programming-in-cc-handling-multiple-clients-on-server-without-multi-threading/ 선택 기능은 TCP 소켓과 UDP 소켓 중에서 선택하는 데 사용됩니다. 이 함수는 커널에 여러 이벤트가 발생할 때까지 기다리도록 지침을 제공하고 하나 이상의 이벤트가 발생하거나 지정된 시간이 경과한 후에만 프로세스를 일깨워줍니다. 프로그램을 실행합니다. 이 예제에서는 프로그램을 백그라운드에서 실행하도록 했습니다. 다음 프로그램 예제는 간단한 다중 사용자 채팅 서버처럼 작동합니다.

한 창에서 실행을 시작한 다음 다른 창에서 텔넷(“텔넷 호스트 이름 2020”)으로 통신합니다. 이전 문서에서는 TCP 서버와 UDP 서버를 보았습니다. 그러나 이제 동시 TCP 에코 서버와 반복 UDP 서버를 선택을 사용하여 TCP 및 UDP 스코켓을 멀티플렉스하는 단일 서버로 결합할 수 있습니다. 시스템 호출 `선택`으로 당신은 한 번에 여러 연결을 처리 할 수 없습니다. 이렇게 하려면 스레드 또는 프로세스를 사용해야 합니다.