类 Unix 操作系统的信号处理程序
由于内核使用 C 调用约定调用信号处理程序,因此我们必须告诉编译器在编译函数时使用 C 调用约定。
volatile sig_atomic_t death_signal = 0;
extern "C" void cleanup(int signum) {
death_signal = signum;
}
int main() {
bind(...);
listen(...);
signal(SIGTERM, cleanup);
while (int fd = accept(...)) {
if (fd == -1 && errno == EINTR && death_signal) {
printf("Caught signal %d; shutting down\n", death_signal);
break;
}
// ...
}
}