int listen_port = 4822; /* Default port */
int opt;
+ /* Daemon Process */
+ pid_t daemon_pid;
+
/* Parse arguments */
while ((opt = getopt(argc, argv, "l:")) != -1) {
if (opt == 'l') {
exit(EXIT_FAILURE);
}
- syslog(LOG_INFO, "Started, listening on port %i", listen_port);
+ /* Fork into background */
+ daemon_pid = fork();
+
+ /* If error, fail */
+ if (daemon_pid == -1) {
+ fprintf(stderr, "Error forking daemon process: %s\n", strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+
+ /* If parent, exit */
+ else if (daemon_pid != 0) {
+ exit(EXIT_SUCCESS);
+ }
+ /* Otherwise, this is the daemon */
+ syslog(LOG_INFO, "Started, listening on port %i", listen_port);
/* Daemon loop */
for (;;) {