Нет. Единственный параметр, передаваемый вашему обработчику сигнала, это int
, который является номером сигнала.
Типичный способ справиться с описанной вами ситуацией - использовать глобальную переменную, такую как int stopAndExit
, которую проверяет ваш цикл. Если он обработан обработчиком сигнала, который, как вы знаете, очистит и выйдет на 1
.
Редактировать: Для более подробного обсуждения, вызванного комментариями ниже.
Одна из проблем заключается в том, что при поступлении сигнала вы находитесь в нереентеральной функции. Чтобы справиться с этим, вы действительно хотите задержать (заблокировать) сигналы, а затем обработать их в точке вашего основного цикла, которая является безопасной.
Последнее редактирование: Если у вас не происходит каких-либо внешних операций, которые необходимо предварительно очистить, чтобы гарантировать выход в чистом состоянии ... это не имеет значения. Ваши дескрипторы сокетов и буферы все равно исчезают, когда вы выходите. Там не нужно ничего убирать.