summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2008-04-25 15:38:52 +0000
committerLennart Poettering <lennart@poettering.net>2008-04-25 15:38:52 +0000
commit2b738ae57b45a37f3e39359fc86fafbb7ffb8f65 (patch)
tree492ffb3e02a1c3c64b945177d10c0a65514b75e1 /examples
parentd05525e4181e5ae14ac6bf7d7b39eaf4ee33361f (diff)
beef the example up, adding support for the new API functions
git-svn-id: file:///home/lennart/svn/public/libdaemon/trunk@140 153bfa13-eec0-0310-be40-b0cb6a0e1b4b
Diffstat (limited to 'examples')
-rw-r--r--examples/testd.c32
1 files changed, 22 insertions, 10 deletions
diff --git a/examples/testd.c b/examples/testd.c
index c8f5b52..3400af7 100644
--- a/examples/testd.c
+++ b/examples/testd.c
@@ -36,6 +36,18 @@
int main(int argc, char *argv[]) {
pid_t pid;
+ /* Reset signal handlers */
+ if (daemon_reset_sigs(-1) < 0) {
+ daemon_log(LOG_ERR, "Failed to reset all signal handlers: %s", strerror(errno));
+ return 1;
+ }
+
+ /* Unblock signals */
+ if (daemon_unblock_sigs(-1) < 0) {
+ daemon_log(LOG_ERR, "Failed to unblock all signals: %s", strerror(errno));
+ return 1;
+ }
+
/* Set indetification string for the daemon for both syslog and PID file */
daemon_pid_file_ident = daemon_log_ident = daemon_ident_from_argv0(argv[0]);
@@ -47,7 +59,7 @@ int main(int argc, char *argv[]) {
/* Check if the new function daemon_pid_file_kill_wait() is available, if it is, use it. */
if ((ret = daemon_pid_file_kill_wait(SIGINT, 5)) < 0)
- daemon_log(LOG_WARNING, "Failed to kill daemon");
+ daemon_log(LOG_WARNING, "Failed to kill daemon: %s", strerror(errno));
return ret < 0 ? 1 : 0;
}
@@ -56,7 +68,6 @@ int main(int argc, char *argv[]) {
if ((pid = daemon_pid_file_is_running()) >= 0) {
daemon_log(LOG_ERR, "Daemon already running on PID file %u", pid);
return 1;
-
}
/* Prepare for return value passing from the initialization procedure of the daemon process */
@@ -74,7 +85,7 @@ int main(int argc, char *argv[]) {
/* Wait for 20 seconds for the return value passed from the daemon process */
if ((ret = daemon_retval_wait(20)) < 0) {
- daemon_log(LOG_ERR, "Could not recieve return value from daemon process.");
+ daemon_log(LOG_ERR, "Could not recieve return value from daemon process: %s", strerror(errno));
return 255;
}
@@ -85,24 +96,26 @@ int main(int argc, char *argv[]) {
int fd, quit = 0;
fd_set fds;
+ /* Close FDs */
if (daemon_close_all(-1) < 0) {
daemon_log(LOG_ERR, "Failed to close all file descriptors: %s", strerror(errno));
+
+ /* Send the error condition to the parent process */
+ daemon_retval_send(1);
goto finish;
}
/* Create the PID file */
if (daemon_pid_file_create() < 0) {
daemon_log(LOG_ERR, "Could not create PID file (%s).", strerror(errno));
-
- /* Send the error condition to the parent process */
- daemon_retval_send(1);
+ daemon_retval_send(2);
goto finish;
}
/* Initialize signal handling */
if (daemon_signal_init(SIGINT, SIGTERM, SIGQUIT, SIGHUP, 0) < 0) {
daemon_log(LOG_ERR, "Could not register signal handlers (%s).", strerror(errno));
- daemon_retval_send(2);
+ daemon_retval_send(3);
goto finish;
}
@@ -114,7 +127,6 @@ int main(int argc, char *argv[]) {
daemon_log(LOG_INFO, "Sucessfully started");
-
/* Prepare for select() on the signal fd */
FD_ZERO(&fds);
fd = daemon_signal_fd();
@@ -140,7 +152,7 @@ int main(int argc, char *argv[]) {
/* Get signal */
if ((sig = daemon_signal_next()) <= 0) {
- daemon_log(LOG_ERR, "daemon_signal_next() failed.");
+ daemon_log(LOG_ERR, "daemon_signal_next() failed: %s", strerror(errno));
break;
}
@@ -166,7 +178,7 @@ int main(int argc, char *argv[]) {
/* Do a cleanup */
finish:
daemon_log(LOG_INFO, "Exiting...");
- daemon_retval_send(-1);
+ daemon_retval_send(255);
daemon_signal_done();
daemon_pid_file_remove();