43 lines
904 B
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;
|
|
}
|