Для сервера вы обычно вызываете select в цикле. В верхней части цикла вы создаете списки файловых дескрипторов из клиентских подключений. На этом этапе я бы вычислил самое длинное, которое вы хотите подождать в выбранном вами списке (наименьшее время до истечения времени ожидания следующего клиентского соединения). Затем вызовите select с этим таймаутом. После завершения выбора вы проверяете каждое из соединений, чтобы увидеть, были ли получены данные, получено ли новое соединение или истекло ли время ожидания. Обработайте любые данные, откройте / закройте все соединения, а затем вернитесь к началу цикла.