Слишком распространенный подход здесь - это читать все, что ожидает на данном сокете, особенно если вы переходите к API-интерфейсам расширенного опроса для конкретной платформы, таким как kqueue(2)
и epoll(7)
Включение событий, инициируемых по фронту . Но вы, конечно, не должны! Отразите немного, связанный с этим сокетом, где-то, как только вы думаете, что получили достаточно данных (но не все), и сделайте больше recv(2)
позже, скажем, в самом конце цикла проверки файлового дескриптора, без повторного вызова select(2)
.
Тогда вопрос слишком общий. Каковы твои цели? Низкая задержка? Высокая пропускная способность? Масштабируемость? На все нет однозначного ответа (ну, кроме 42 :)