summaryrefslogtreecommitdiff
path: root/libdaemon/dsignal.h
diff options
context:
space:
mode:
Diffstat (limited to 'libdaemon/dsignal.h')
-rw-r--r--libdaemon/dsignal.h80
1 files changed, 80 insertions, 0 deletions
diff --git a/libdaemon/dsignal.h b/libdaemon/dsignal.h
new file mode 100644
index 0000000..1edfdcc
--- /dev/null
+++ b/libdaemon/dsignal.h
@@ -0,0 +1,80 @@
+#ifndef foodaemonsignalhfoo
+#define foodaemonsignalhfoo
+
+/***
+ This file is part of libdaemon.
+
+ Copyright 2003-2008 Lennart Poettering
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
+***/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** \file
+ *
+ * Contains the API for serializing signals to a pipe for
+ * usage with select() or poll().
+ *
+ * You should register all signals you
+ * wish to handle with select() in your main loop with
+ * daemon_signal_init() or daemon_signal_install(). After that you
+ * should sleep on the file descriptor returned by daemon_signal_fd()
+ * and get the next signal recieved with daemon_signal_next(). You
+ * should call daemon_signal_done() before exiting.
+ */
+
+/** Installs signal handlers for the specified signals
+ * @param s, ... The signals to install handlers for. The list should be terminated by 0
+ * @return zero on success, nonzero on failure
+ */
+int daemon_signal_init(int s, ...);
+
+/** Install a signal handler for the specified signal
+ * @param s The signalto install handler for
+ * @return zero onsuccess,nonzero on failure
+ */
+int daemon_signal_install(int s);
+
+/** Free resources of signal handling, should be called before daemon exit
+ */
+void daemon_signal_done(void);
+
+/** Return the next signal recieved. This function will not
+ * block. Instead it returns 0 if no signal is queued.
+ * @return The next queued signal if one is queued, zero if none is
+ * queued, negative on failure.
+ */
+int daemon_signal_next(void);
+
+/** Return the file descriptor the daemon should select() on for
+ * reading. Whenever the descriptor is ready you should call
+ * daemon_signal_next() to get the next signal queued.
+ * @return The file descriptor or negative on failure
+ */
+int daemon_signal_fd(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif