-
- if (drop_privileges(RUNAS_USER, RUNAS_GROUP) < 0) {
- syslog(LOG_CRIT, "unable to drop privileges");
- return EXIT_FAILURE;
- }
-
- if (daemonize && daemon_detach() < 0) {
- syslog(LOG_CRIT, "unable to fork");
- return EXIT_FAILURE;
- }
-
- pidfile_refresh();
-
- addr.sin_port = htons(port);
- sock = tcp_listen((struct sockaddr *)&addr, sizeof(addr));
- if (sock < 0)
- return EXIT_FAILURE;
-
- while (!sigint) {
- int fd = accept(sock, NULL, 0);
- if (fd < 0) {
- if (errno != EINTR && errno != EAGAIN)
- UNIXERR("accept");
- continue;
- }
- thread_launch(policy_run, fd, NULL);
- threads_join();
- }
-
- close(sock);
- syslog(LOG_INFO, "Stopping...");
- return EXIT_SUCCESS;