+#if defined(unix)
+{
+ pid_t pid = 0;
+#if 0
+ int fd;
+#endif
+
+ /*
+ * we make us a real daemon
+ */
+#ifdef _DEBUG
+ if ( !ldebug)
+#endif
+ pid = fork();
+ if ( pid < 0 ) /* error */
+ {
+ perror("fork");
+ exit( 3 );
+ }
+ else if ( pid != 0 ) /* parent */
+ {
+ int status;
+ pid_t wpid;
+ /*
+ * must check for errors
+ * child died due to missing files aso
+ */
+ sleep( 1 );
+ wpid = waitpid( pid, &status, WNOHANG );
+ if ( wpid != 0 )
+ {
+ exit( 1 );
+ }
+ exit( 0 );
+ }
+ /* child */
+#if 1
+ /* Should be more portable, but not as well tested */
+ setsid();
+#else /* !1 */
+#ifdef __FreeBSD__
+ setpgrp(0,0);
+#else /* ndef __FreeBSD__ */
+ setpgrp();
+#endif /* ndef __FreeBSD__ */
+ fd = open("/dev/tty", O_RDONLY);
+ if ( fd )
+ {
+ /* no error check here */
+ ioctl( fd, TIOCNOTTY,0 );
+ close ( fd );
+ }
+#endif /* !1 */
+ /* should close stderr (fd 2) here too, but the test for existence
+ ** and load config file is done in listen_loop() and puts
+ ** some messages on stderr there.
+ */
+#ifdef _DEBUG
+ if ( !ldebug )
+ {
+ close( 0 );
+ close( 1 );
+ }
+#else
+ close( 0 );
+ close( 1 );
+#endif /* _DEBUG */
+ chdir("/");
+
+}
+#endif /* defined unix */
+
+ DBG(1, ("call listen_loop() \n") );