NAME

ACE_Sig_Handler - This is the main dispatcher of signals for ACE. It improves the existing UNIX signal handling mechanism by allowing C++ objects to handle signals in a way that avoids the use of global/static variables and functions.

SYNOPSIS

#include <ace/Signal.h>

class ACE_Sig_Handler { public: ACE_Sig_Handler (void); virtual ~ACE_Sig_Handler (void); virtual int register_handler ( int signum, ACE_Event_Handler *new_sh, ACE_Sig_Action *new_disp = 0, ACE_Event_Handler **old_sh = 0, ACE_Sig_Action *old_disp = 0 ); virtual int remove_handler ( int signum, ACE_Sig_Action *new_disp = 0, ACE_Sig_Action *old_disp = 0, int sigkey = -1 ); static int sig_pending (void); static void sig_pending (int); virtual ACE_Event_Handler *handler (int signum); virtual ACE_Event_Handler *handler ( int signum, ACE_Event_Handler * ); static void dispatch (int, siginfo_t *, ucontext_t *); void dump (void) const; ACE_ALLOC_HOOK_DECLARE; protected: static ACE_Event_Handler *handler_i ( int signum, ACE_Event_Handler * ); static int register_handler_i ( int signum, ACE_Event_Handler *new_sh, ACE_Sig_Action *new_disp = 0, ACE_Event_Handler **old_sh = 0, ACE_Sig_Action *old_disp = 0 ); static int in_range (int signum); static sig_atomic_t sig_pending_; private: static ACE_Event_Handler *signal_handlers_[ACE_NSIG]; };

DESCRIPTION

Using this class a program can register an ACE_Event_Handler with the ACE_Sig_Handler in order to handle a designated signum. When a signal occurs that corresponds to this signum, the handle_signal method of the registered ACE_Event_Handler is invoked automatically.

Registration and removal methods.

virtual int register_handler (
    int signum,
    ACE_Event_Handler *new_sh,
    ACE_Sig_Action *new_disp = 0,
    ACE_Event_Handler **old_sh = 0,
    ACE_Sig_Action *old_disp = 0
    );

virtual int remove_handler (
    int signum,
    ACE_Sig_Action *new_disp = 0,
    ACE_Sig_Action *old_disp = 0,
    int sigkey = -1
    );

Set/get signal status.

static int sig_pending (void);

static void sig_pending (int);

Set/get the handler associated with a particular signal.

virtual ACE_Event_Handler *handler (int signum);

virtual ACE_Event_Handler *handler (int signum, ACE_Event_Handler *);

static void dispatch (int, siginfo_t *, ucontext_t *);

void dump (void) const;

ACE_ALLOC_HOOK_DECLARE;

These methods and data members are shared by derived classes.

static ACE_Event_Handler *handler_i (int signum, ACE_Event_Handler *);

static int register_handler_i (
    int signum,
    ACE_Event_Handler *new_sh,
    ACE_Sig_Action *new_disp = 0,
    ACE_Event_Handler **old_sh = 0,
    ACE_Sig_Action *old_disp = 0
    );

static int in_range (int signum);

static sig_atomic_t sig_pending_;

AUTHOR

Doug Schmidt

LIBRARY

ace