/*
 * internal.c - A program that responds to internally
 *              generated events (SIGALARM signals)
 */
#include "csapp.h"

int beeps = 0;

/* SIGALRM handler */
void handler(int sig) {
    sio_puts("BEEP\n");

    if (++beeps < 5)
        alarm(1);
    else {
        sio_puts("BOOM!\n");
        _exit(0);
    }
}

int main(void) {
    struct sigaction sa;

    Sigemptyset(&sa.sa_mask);
    sa.sa_flags = SA_RESTART;
    sa.sa_handler = handler;
    Sigaction(SIGALRM, &sa, NULL);
    alarm(1); /* send SIGALRM in 1 second */

    while (1) {
        continue; /* handler returns here */
    }
}
