類 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;
        }
        // ...
    }
}