net-tools/src/ping/scheduler/scheduler_init.c

43 lines
904 B
C

#include "compiler.h"
#include "internal/ping/scheduler.h"
/* Forward declarations */
static inline void sigint_handler(int sig);
static inline void sigalrm_handler(int sig);
static int install_signal(int signum, void (*handler)(int));
static struct ping_state *g_state = NULL;
/* -------------------- */
int
ping_scheduler_init(struct ping_state *state)
{
g_state = state;
return (install_signal(SIGALRM, sigalrm_handler) != 0 ||
install_signal(SIGINT, sigint_handler) != 0) ? -1 : 0;
}
static int
install_signal(int signum, void (*handler)(int))
{
struct sigaction sa;
sa.sa_handler = handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
return sigaction(signum, &sa, NULL);
}
static inline void
sigalrm_handler(__unused int sig)
{
if (NULL != g_state)
g_state->send_flag = 1;
}
static inline void
sigint_handler(__unused int sig)
{
if (NULL != g_state)
g_state->stop_flag = 1;
}