Function silc_schedule_signal_register
SYNOPSIS
void silc_schedule_signal_register(SilcSchedule schedule,
SilcUInt32 signal,
SilcTaskCallback callback,
void *context);
DESCRIPTION
Register signal indicated by `signal' to the scheduler. Application
should register all signals it is going to use to the scheduler.
The `callback' with `context' will be called after the application
has called silc_schedule_signal_call function in the real signal
callback. Application is responsible of calling that, and the
signal system will not work without calling silc_schedule_signal_call
function. The specified `signal' value will be also delivered to
the `callback' as the fd-argument. The event type in the callback
will be SILC_TASK_INTERRUPT. It is safe to use any SILC routines
in the `callback' since it is actually called after the signal really
happened.
On platform that does not support signals calling this function has
no effect.
EXAMPLE
Typical signal usage case on Unix systems:
struct sigaction sa;
sa.sa_handler = signal_handler;
sigaction(SIGHUP, &sa, NULL);
sigaction(SIGINT, &sa, NULL);
silc_schedule_signal_register(schedule, SIGHUP, hup_signal, context);
silc_schedule_signal_register(schedule, SIGINT, int_signal, context);
static void signal_handler(int sig)
{
silc_schedule_signal_call(schedule, sig);
}
The `signal_handler' can be used as generic signal callback in the
application that merely calls silc_schedule_signal_call, which then
eventually will deliver for example the `hup_signal' callback. The
same `signal_handler' can be used with all signals.
|