⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 bind-3.2.
💻 C
📖 第 1 页 / 共 2 页
字号:
		case 'd':			ns_g_debuglevel = parse_int(isc_commandline_argument,						    "debug level");			break;		case 'f':			ns_g_foreground = ISC_TRUE;			break;		case 'g':			ns_g_foreground = ISC_TRUE;			ns_g_logstderr = ISC_TRUE;			break;		/* XXXBEW -i should be removed */		case 'i':			lwresd_g_defaultpidfile = isc_commandline_argument;			break;		case 'l':			ns_g_lwresdonly = ISC_TRUE;			break;		case 'N': /* Deprecated. */		case 'n':			ns_g_cpus = parse_int(isc_commandline_argument,					      "number of cpus");			if (ns_g_cpus == 0)				ns_g_cpus = 1;			break;		case 'p':			port = parse_int(isc_commandline_argument, "port");			if (port < 1 || port > 65535)				ns_main_earlyfatal("port '%s' out of range",						   isc_commandline_argument);			ns_g_port = port;			break;		/* XXXBEW Should -P be removed? */		case 'P':			port = parse_int(isc_commandline_argument, "port");			if (port < 1 || port > 65535)				ns_main_earlyfatal("port '%s' out of range",						   isc_commandline_argument);			lwresd_g_listenport = port;			break;		case 's':			/* XXXRTH temporary syntax */			want_stats = ISC_TRUE;			break;		case 't':			/* XXXJAB should we make a copy? */			ns_g_chrootdir = isc_commandline_argument;			break;		case 'u':			ns_g_username = isc_commandline_argument;			break;		case 'v':			printf("BIND %s\n", ns_g_version);			exit(0);		case '?':			usage();			ns_main_earlyfatal("unknown option '-%c'",					   isc_commandline_option);		default:			ns_main_earlyfatal("parsing options returned %d", ch);		}	}	argc -= isc_commandline_index;	argv += isc_commandline_index;	if (argc > 0) {		usage();		ns_main_earlyfatal("extra command line arguments");	}	}static isc_result_tcreate_managers(void) {	isc_result_t result;#ifdef ISC_PLATFORM_USETHREADS	if (ns_g_cpus == 0)		ns_g_cpus = isc_os_ncpus();#else	ns_g_cpus = 1;#endif	isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,		      ISC_LOG_INFO, "using %u CPU%s",		      ns_g_cpus, ns_g_cpus == 1 ? "" : "s");	result = isc_taskmgr_create(ns_g_mctx, ns_g_cpus, 0, &ns_g_taskmgr);	if (result != ISC_R_SUCCESS) {		UNEXPECTED_ERROR(__FILE__, __LINE__,				 "ns_taskmgr_create() failed: %s",				 isc_result_totext(result));		return (ISC_R_UNEXPECTED);	}	result = isc_timermgr_create(ns_g_mctx, &ns_g_timermgr);	if (result != ISC_R_SUCCESS) {		UNEXPECTED_ERROR(__FILE__, __LINE__,				 "ns_timermgr_create() failed: %s",				 isc_result_totext(result));		return (ISC_R_UNEXPECTED);	}	result = isc_socketmgr_create(ns_g_mctx, &ns_g_socketmgr);	if (result != ISC_R_SUCCESS) {		UNEXPECTED_ERROR(__FILE__, __LINE__,				 "isc_socketmgr_create() failed: %s",				 isc_result_totext(result));		return (ISC_R_UNEXPECTED);	}	result = isc_entropy_create(ns_g_mctx, &ns_g_entropy);	if (result != ISC_R_SUCCESS) {		UNEXPECTED_ERROR(__FILE__, __LINE__,				 "isc_entropy_create() failed: %s",				 isc_result_totext(result));		return (ISC_R_UNEXPECTED);	}	result = isc_hash_create(ns_g_mctx, ns_g_entropy, DNS_NAME_MAXWIRE);	if (result != ISC_R_SUCCESS) {		UNEXPECTED_ERROR(__FILE__, __LINE__,				 "isc_hash_create() failed: %s",				 isc_result_totext(result));		return (ISC_R_UNEXPECTED);	}	return (ISC_R_SUCCESS);}static voiddestroy_managers(void) {	ns_lwresd_shutdown();	isc_entropy_detach(&ns_g_entropy);	/*	 * isc_taskmgr_destroy() will block until all tasks have exited,	 */	isc_taskmgr_destroy(&ns_g_taskmgr);	isc_timermgr_destroy(&ns_g_timermgr);	isc_socketmgr_destroy(&ns_g_socketmgr);	/*	 * isc_hash_destroy() cannot be called as long as a resolver may be	 * running.  Calling this after isc_taskmgr_destroy() ensures the	 * call is safe.	 */	isc_hash_destroy();}static voidsetup(void) {	isc_result_t result;	/*	 * Get the user and group information before changing the root	 * directory, so the administrator does not need to keep a copy	 * of the user and group databases in the chroot'ed environment.	 */	ns_os_inituserinfo(ns_g_username);	ns_os_chroot(ns_g_chrootdir);	/*	 * For operating systems which have a capability mechanism, now	 * is the time to switch to minimal privs and change our user id.	 * On traditional UNIX systems, this call will be a no-op, and we	 * will change the user ID after reading the config file the first	 * time.  (We need to read the config file to know which possibly	 * privileged ports to bind() to.)	 */	ns_os_minprivs();	result = ns_log_init(ISC_TF(ns_g_username != NULL));	if (result != ISC_R_SUCCESS)		ns_main_earlyfatal("ns_log_init() failed: %s",				   isc_result_totext(result));	/*	 * Now is the time to daemonize (if we're not running in the	 * foreground).  We waited until now because we wanted to get	 * a valid logging context setup.  We cannot daemonize any later,	 * because calling create_managers() will create threads, which	 * would be lost after fork().	 */	if (!ns_g_foreground)		ns_os_daemonize();	isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_MAIN,		      ISC_LOG_NOTICE, "starting BIND %s%s", ns_g_version,		      saved_command_line);	/*	 * Get the initial resource limits.	 */	(void)isc_resource_getlimit(isc_resource_stacksize,				    &ns_g_initstacksize);	(void)isc_resource_getlimit(isc_resource_datasize,				    &ns_g_initdatasize);	(void)isc_resource_getlimit(isc_resource_coresize,				    &ns_g_initcoresize);	(void)isc_resource_getlimit(isc_resource_openfiles,				    &ns_g_initopenfiles);	/*	 * If the named configuration filename is relative, prepend the current	 * directory's name before possibly changing to another directory.	 */	if (! isc_file_isabsolute(ns_g_conffile)) {		result = isc_file_absolutepath(ns_g_conffile,					       absolute_conffile,					       sizeof(absolute_conffile));		if (result != ISC_R_SUCCESS)			ns_main_earlyfatal("could not construct absolute path of "					   "configuration file: %s", 					   isc_result_totext(result));		ns_g_conffile = absolute_conffile;	}	result = create_managers();	if (result != ISC_R_SUCCESS)		ns_main_earlyfatal("create_managers() failed: %s",				   isc_result_totext(result));	/*	 * Add calls to register sdb drivers here.	 */	/* xxdb_init(); */	ns_server_create(ns_g_mctx, &ns_g_server);}static voidcleanup(void) {	destroy_managers();	ns_server_destroy(&ns_g_server);	/*	 * Add calls to unregister sdb drivers here.	 */	/* xxdb_clear(); */	isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_MAIN,		      ISC_LOG_NOTICE, "exiting");	ns_log_shutdown();}intmain(int argc, char *argv[]) {	isc_result_t result;	result = isc_file_progname(*argv, program_name, sizeof(program_name));	if (result != ISC_R_SUCCESS)		ns_main_earlyfatal("program name too long");	if (strcmp(program_name, "lwresd") == 0)		ns_g_lwresdonly = ISC_TRUE;	isc_assertion_setcallback(assertion_failed);	isc_error_setfatal(library_fatal_error);	isc_error_setunexpected(library_unexpected_error);	ns_os_init(program_name);	result = isc_app_start();	if (result != ISC_R_SUCCESS)		ns_main_earlyfatal("isc_app_start() failed: %s",				   isc_result_totext(result));	result = isc_mem_create(0, 0, &ns_g_mctx);	if (result != ISC_R_SUCCESS)		ns_main_earlyfatal("isc_mem_create() failed: %s",				   isc_result_totext(result));	dns_result_register();	dst_result_register();	isccc_result_register();	parse_command_line(argc, argv);	setup();	/*	 * Start things running and then wait for a shutdown request	 * or reload.	 */	do {		result = isc_app_run();		if (result == ISC_R_RELOAD) {			ns_server_reloadwanted(ns_g_server);		} else if (result != ISC_R_SUCCESS) {			UNEXPECTED_ERROR(__FILE__, __LINE__,					 "isc_app_run(): %s",					 isc_result_totext(result));			/*			 * Force exit.			 */			result = ISC_R_SUCCESS;		}	} while (result != ISC_R_SUCCESS);	cleanup();	if (want_stats) {		isc_mem_stats(ns_g_mctx, stdout);		isc_mutex_stats(stdout);	}	isc_mem_destroy(&ns_g_mctx);	isc_app_finish();	ns_os_shutdown();	return (0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -