Правильно ли ответить и закрыть подключение
ну как, если вам это соединение больше не понадобится, то да. Если люди будут соединяться раз в 10 секунд и их будет много, у вас просто упадет сервер (ну или просто нагрузка будет нереально большой). Накладные расходы на создание соединения выше, чем оные на обслуживание.
Как только соединение создано, оно только занимает один дискриптор сокета. И все. У вас могут просто сокеты закончиться свободные, но это решаемая проблема. И все. Больше ресурсов оно не потребляет. А при помощи epoll можно выбирать соединения из общей пачки которые содержат данные на чтение или запись, или которые отвалились... правда я не уверен в контексте libevent, мне казалось что оно это само разруливает.
Так же можно сделать один поток, который принимает соединения и раскидывает их по процессам воркерам. А те уже их обслуживают. Например в nginx каждый процесс-воркер обслуживает свои пачки соединений и разруливает все внутри процесса через тот же epoll. То есть не соединение = процесс, а много соединений = процесс.