当前位置: 首页>>代码示例>>C++>>正文


C++ Daemon::incarcerate方法代码示例

本文整理汇总了C++中Daemon::incarcerate方法的典型用法代码示例。如果您正苦于以下问题:C++ Daemon::incarcerate方法的具体用法?C++ Daemon::incarcerate怎么用?C++ Daemon::incarcerate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Daemon的用法示例。


在下文中一共展示了Daemon::incarcerate方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: if


//.........这里部分代码省略.........
		::signal(SIGTERM, SIG_DFL);
		::signal(SIGINT, SIG_DFL);
		::signal(SIGILL, SIG_DFL);
		::signal(SIGIOT, SIG_DFL);
		::signal(SIGBUS, SIG_DFL);
		::signal(SIGFPE, SIG_DFL);
		::signal(SIGSEGV, SIG_DFL);
		::signal(SIGSTKFLT, SIG_DFL);
		daemon.unblock_signals();

		if (!nodaemon) {
			if (!daemon.lock()) {
				log(name() + " already running: exit");
				closelog();
				return 1;
				}

			daemon.write_pid();
			}
		}
	catch (std::exception& e) {
		die = true;
		log(e.what(), LOG_CRIT);
		closelog();
		return 1;
		}

	try {
		daemon.go_home();

		//	Harden our umask so that the new socket gets created
		//		securely.

		umask(0077);

		//	Register to the milter interface.

		socket(sockarg);
		debug(debuglvl);

		if (initialize<Undervest>() != MI_SUCCESS) {
			log("Cannot initialize milter interface", LOG_CRIT);
			closelog();
			return 1;
			}

		//	If we need to set the uid/gid/jail, do it now.

		daemon.incarcerate();
		daemon.change_identity();

		//	Start the scheduler.

		schedThread = std::thread(&Scheduler::run, std::ref(sched));

		//	Read configuration file and domain data.

		reload();

		if (&(*conf) == NULL) {
			sched.stop();
			return 1;
			}

		//	Start a thread to monitor and process our signals.
		//	Note: Signals SIGTERM, SIGHUP and SIGABRT are processed
		//		by the milter library.

		sigThread = std::thread(&Globals::reloader, std::ref(*this));

		//	Enter the milter service loop.

		if (start(static_cast<void *>(this)) == MI_FAILURE)
			throw std::runtime_error("Cannot run the milter");
		}
	catch (std::exception& e) {
		die = true;
		sched.stop();
		log(e.what(), LOG_CRIT);

		if (!nodaemon) {
			daemon.delete_pid();
			daemon.delete_lock();
			}

		closelog();
		return 1;
		}

	die = true;
	sched.stop();

	if (!nodaemon) {
		daemon.delete_pid();
		daemon.delete_lock();
		}

	closelog();
	return 0;
}
开发者ID:monnerat,项目名称:undervest,代码行数:101,代码来源:main.cpp


注:本文中的Daemon::incarcerate方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。