Mercurial > dnsbl
view src/daemon.c @ 227:3fee608becbc stable-6-0-21
Fixes to compile on old systems without memrchr or string::clear().
Fix bug in spamassassin interface trying to clear a string with string::empty().
author | Carl Byington <carl@five-ten-sg.com> |
---|---|
date | Sat, 03 Jan 2009 15:16:47 -0800 |
parents | 4db1457cd11a |
children |
line wrap: on
line source
/*Add by Sergey Shapovalov */ #include <unistd.h> #include <stdlib.h> #include <fcntl.h> #include <signal.h> #include <sys/types.h> #include <sys/wait.h> #include <errno.h> /* closeall() -- close all FDs >= a specified value */ void closeall(int fd) { int fdlimit = sysconf(_SC_OPEN_MAX); while (fd < fdlimit) close(fd++); } /* daemon() - detach process from user and disappear into the background * returns -1 on failure, but you can't do much except exit in that case * since we may already have forked. This is based on the BSD version, * so the caller is responsible for things like the umask, etc. */ /* believed to work on all Posix systems */ int daemon(int nochdir, int noclose) { switch (fork()) { case 0: break; case -1: return -1; default: _exit(0); /* exit the original process */ } if (setsid() < 0) /* shoudn't fail */ return -1; /* dyke out this switch if you want to acquire a control tty in */ /* the future -- not normally advisable for daemons */ switch (fork()) { case 0: break; case -1: return -1; default: _exit(0); } if (!nochdir) chdir("/"); if (!noclose) { closeall(0); open("/dev/null",O_RDWR); dup(0); dup(0); } return 0; }