1) В однопоточной программе вы можете использовать сигнал из другого процесса. Убедитесь, что вы НЕ передаете флаг SA_RESTART при установке обработчика сигнала.
2) Если вам нужно остановить accept()
из другого потока того же процесса, создайте пару сокетов или канал и заблокируйте на select()
свой сокет и этот канал. Когда вам нужно разблокировать, напишите что-нибудь в трубу.
3) Или просто используйте select()
с небольшим тайм-аутом (1 секунда) и опрашивайте флаг выхода каждый раз, когда он возвращается.