X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=server.c;h=6195266bb8f87ca168c410c44aef5dfac18586b4;hp=ce56494f4fce68d0ce3f1499b8e00ee609d9b05e;hb=883af7d8af543616fe4ca09b0273dd4f59848779;hpb=6570e0e4433a5e5d7987697716a1f993c96eb1bb diff --git a/server.c b/server.c index ce56494f..6195266b 100644 --- a/server.c +++ b/server.c @@ -42,6 +42,8 @@ #include "string.h" #include "ipc.h" #include "fd.h" +#include "signal.h" +#include "user_list.h" /** define the array of error lists needed by para_server */ INIT_SERVER_ERRLISTS; @@ -57,7 +59,7 @@ struct misc_meta_data *mmd; * senders. */ struct server_args_info conf; -char *user_list = NULL; +char *user_list_file = NULL; extern void dccp_send_init(struct sender *); extern void http_send_init(struct sender *); extern void ortp_send_init(struct sender *); @@ -221,11 +223,11 @@ static void parse_config(int override) cf = conf.config_file_arg; else cf = make_message("%s/.paraslash/server.conf", home); - free(user_list); + free(user_list_file); if (!conf.user_list_given) - user_list = make_message("%s/.paraslash/server.users", home); + user_list_file = make_message("%s/.paraslash/server.users", home); else - user_list = para_strdup(conf.user_list_arg); + user_list_file = para_strdup(conf.user_list_arg); ret = stat(cf, &statbuf); if (ret && conf.config_file_given) { ret = -1; @@ -251,8 +253,8 @@ out: free(home); if (ret > 0) return; - free(user_list); - user_list = NULL; + free(user_list_file); + user_list_file = NULL; exit(EXIT_FAILURE); } @@ -302,11 +304,18 @@ random: static unsigned init_network(void) { - int sockfd = init_tcp_socket(conf.port_arg); + int fd, ret = init_tcp_socket(conf.port_arg); - if (sockfd < 0) - exit(EXIT_FAILURE); - return sockfd; + if (ret < 0) + goto err; + fd = ret; + ret = mark_fd_nonblock(fd); + if (ret < 0) + goto err; + return fd; +err: + PARA_EMERG_LOG("%s\n", PARA_STRERROR(-ret)); + exit(EXIT_FAILURE); } static void init_random_seed(void) @@ -346,6 +355,7 @@ static unsigned do_inits(int argc, char **argv) log_welcome("para_server", conf.loglevel_arg); shm_init(); /* init mmd struct */ server_uptime(UPTIME_SET); /* reset server uptime */ + init_user_list(user_list_file); /* become daemon */ if (conf.daemon_given) daemon_init(); @@ -359,10 +369,6 @@ static unsigned do_inits(int argc, char **argv) /* init network socket */ PARA_NOTICE_LOG("%s", "initializing tcp command socket\n"); sockfd = init_network(); - if (conf.autoplay_given) { - mmd->afs_status_flags |= AFS_PLAYING; - mmd->new_afs_status_flags |= AFS_PLAYING; - } PARA_NOTICE_LOG("%s", "init complete\n"); return sockfd; } @@ -395,6 +401,7 @@ static void handle_sighup(void) parse_config(1); /* reopens log */ mmd->selector_change = mmd->selector_num; /* do not change selector.. */ change_selector(); /* .. just reload */ + init_user_list(user_list_file); /* reload user list */ } static void status_refresh(void)