Исходя из вашего описания, вы уже поделили свое приложение на интерфейс (получение входных данных) и бэкэнд (обработка сокетов и задачи). Если входные данные из внешнего интерфейса отправляются через сокет (через бэкэнд), а не получают входные данные из сокета, то создается впечатление, что вы описываете клиент, а не сервер. Клиентские программы обычно не реализуются как демоны.
Вы создали блокирующий сокет, и вам необходимо либо отслеживать в отдельном потоке выполнение потока, либо даже отдельный процесс) или создать неблокирующий сокет и часто запрашивать обновления.
Ссылка на LinuxGazette - это базовое введение в сетевое программирование. Если вы хотите немного глубже, взгляните на Руководство Beej по сетевому программированию , где различные доступные вызовы API объяснены в нескольких деталях ... и, возможно, заставят вас ценить больше обертки библиотеки, такие как Boost :: ASIO.