История изменений
Исправление firkax, (текущая версия) :
Используй не signal() а sigaction(). А за поведение, на которое ты жалуешься, там отвечает флаг SA_RESTART. Если его не ставить - accept висеть не будет, и вернёт EINTR после первого же сигнала. Хотя я подозреваю что и у signal() будет такое же поведение, но не проверял, возможно он и правда работает как будто SA_RESTART установлен.
if(num == SIGTERM) {
Эта проверка тут лишняя. Если тебе нужно разное поведение на разных сигналах - просто назначь им разные обработчики.
В обработчике сигнала обычно записывают единицу в какую-нить volatile переменную и больше ничего не делают. А наличие этой единицы проверяет уже основной код программы там где надо. Например у тебя можно сделать volatile int exit_flag; и вместо while(1) сделать while(!exit_flag)
Исправление firkax, :
Используй не signal() а sigaction(). А за поведение, на которое ты жалуешься, там отвечает флаг SA_RESTART. Если его не ставить - accept висеть не будет, и вернёт EINTR после первого же сигнала. Хотя я подозреваю что и у signal() будет такое же поведение, но не проверял, возможно он и правда работает как будто SA_RESTART установлен.
if(num == SIGTERM) {
Эта проверка тут лишняя. Если тебе нужно разное поведение на разных сигналах - просто назначь им разные обработчики.
В обработчике сигнала обычно записывают единицу в какую-нить volatile переменную и больше ничего не делают. А наличие этой единицы проверяет уже основной код программы там где надо.
Исправление firkax, :
Используй не signal() а sigaction(). А за поведение, на которое ты жалуешься, там отвечает флаг SA_RESTART. Если его не ставить - accept висеть не будет, и вернёт EINTR после первого же сигнала. Хотя я подозреваю что и у signal() будет такое же поведение, но не проверял, возможно он и правда работает как будто SA_RESTART установлен.
if(num == SIGTERM) {
Эта проверка тут лишняя. Если тебе нужно разное поведение на разных сигналах - просто назначь им разные обработчики.
Исходная версия firkax, :
Используй не signal() а sigaction(). А за поведение, на которое ты жалуешься, там отвечает флаг SA_RESTART. Если его не ставить - accept висеть не будет, и вернёт EINTR после первого же сигнала. Хотя я подозреваю что и у signal() будет такое же поведение, но не проверял, возможно он и правда работает как будто SA_RESTART установлен.