/* the following function is for server. */ gfarm_error_t gfarm_server_initialize(char *config_file, int *argcp, char ***argvp) { gfarm_error_t e; if ((e = gfarm_context_init()) != GFARM_ERR_NO_ERROR) { gflog_debug(GFARM_MSG_1003684, "gfarm_context_init failed: %s", gfarm_error_string(e)); return (e); } gflog_initialize(); if (argvp) gfarm_config_set_argv0(**argvp); if (config_file != NULL) gfarm_config_set_filename(config_file); e = gfarm_server_config_read(); if (e != GFARM_ERR_NO_ERROR) { gflog_debug(GFARM_MSG_1000977, "gfarm_server_config_read() failed: %s", gfarm_error_string(e)); return (e); } gfarm_setup_debug_command(); gfarm_config_set_default_spool_on_server(); return (GFARM_ERR_NO_ERROR); }
int main(int argc, char **argv) { extern char *optarg; extern int optind; char *e, *config_file = NULL, *port_number = NULL; int syslog_facility = GFARM_DEFAULT_FACILITY; int ch, sock, table_size; if (argc >= 1) program_name = basename(argv[0]); gflog_set_identifier(program_name); while ((ch = getopt(argc, argv, "df:p:s:")) != -1) { switch (ch) { case 'd': debug_mode = 1; break; case 'f': config_file = optarg; break; case 'p': port_number = optarg; break; case 's': syslog_facility = gflog_syslog_name_to_facility(optarg); if (syslog_facility == -1) gflog_fatal(optarg, "unknown syslog facility"); break; case '?': default: usage(); } } argc -= optind; argv += optind; if (config_file != NULL) gfarm_config_set_filename(config_file); e = gfarm_server_initialize(); if (e != NULL) { fprintf(stderr, "gfarm_server_initialize: %s\n", e); exit(1); } if (port_number != NULL) gfarm_metadb_server_port = strtol(port_number, NULL, 0); sock = open_accepting_socket(gfarm_metadb_server_port); if (!debug_mode) { gflog_syslog_open(LOG_PID, syslog_facility); gfarm_daemon(0, 0); } table_size = GFMD_CONNECTION_LIMIT; gfarm_unlimit_nofiles(&table_size); if (table_size > GFMD_CONNECTION_LIMIT) table_size = GFMD_CONNECTION_LIMIT; file_table_init(table_size); job_table_init(table_size); /* * We don't want SIGPIPE, but want EPIPE on write(2)/close(2). */ signal(SIGPIPE, SIG_IGN); main_loop(sock); /*NOTREACHED*/ return (0); /* to shut up warning */ }