libdap::SignalHandler Class Reference

`#include <SignalHandler.h>`

## Public Member Functions

EventHandler * | register_handler (int signum, EventHandler *eh, bool override=false)
EventHandler * | remove_handler (int signum)

## Static Public Member Functions

static SignalHandler * | instance ()

## Friends

class | HTTPCacheTest
class | SignalHandlerTest

## Detailed Description

Singleton to handle signals. This class adapts the C-style function call interface to one suited for C++. This class records a signal's old action/handler when it installs new handler. When a signal is caught, the new handler (registered with this class) is run and then the old action/handler is performed. This ensures that when libdap++ is embedded in code which has a handler for a signal such as SIGINT which does something other than the default, that thing, whatever it may be, gets done.

This class treats signals it registers (using the EventHandler abstract class) differently than ones registered using the `signal()` or `sigaction()` system interfaces. If the register_handler() method is called and an instance of EventHandler is already bound to signum, then the old EventHandler is returned. However, if there's an existing handler that was set up with `sigaction()`, ..., it won't be returned. Instead it will either be run after the newly registered EventHandler or ignored, depending on register_handler()'s override parameter. This feature may be used only for POSIX.1 signals which cause process termination. They are: SIGHUP, SIGINT, SIGKILL, SIGPIPE, SIGALRM, SIGTERM, SIGUSR1, and SIGUSR2.

Note
  Based on "Applying Design Patterns to Simplify Signal Handling", Douglas C. Schmidt, 1998, http://www.cs.wustl.edu/~schmidt/signal-patterns.html.

See also
  EventHandler

Author
  James Gallagher jgall.nosp@m.aghe.nosp@m.r@ope.nosp@m.ndap.nosp@m..org

Definition at line 66 of file SignalHandler.h.

## Member Function Documentation

## instance()

SignalHandler * libdap::SignalHandler::instance | ( |  | ) |

static

Get a pointer to the single instance of SignalHandler.

Definition at line 131 of file SignalHandler.cc.

## register_handler()

EventHandler * libdap::SignalHandler::register_handler | ( | int | signum,
|  | EventHandler * | eh,
|  | bool | override = `false`
| ) |  |

Register an event handler. By default run any previously registered action/handler such as those installed using `sigaction()`. For signals such as SIGALRM (the alarm signal) this may not be what you want; see the override parameter. See also the class description.

Parameters

  signum | Bind the event handler to this signal number. Limited to those signals that, according to POSIX.1, cause process termination.
  eh | A pointer to the EventHandler for `signum`.
  override | If `true`, do not run the default handler/action. Instead run eh and then treat the signal as if the original action was SIG_IGN. Default is false.

Returns
  A pointer to the old EventHandler or null.

Definition at line 151 of file SignalHandler.cc.

## remove_handler()

EventHandler * libdap::SignalHandler::remove_handler | ( | int | signum | ) |

Remove the event hander.

Parameters

  signum | The signal number of the handler to remove.

Returns
  The old event handler

Definition at line 220 of file SignalHandler.cc.

The documentation for this class was generated from the following files:

- SignalHandler.h
- SignalHandler.cc