X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=http_send.c;h=6a4d24ddea6405805a3ea42f3f2029a28af2b549;hp=0cab7420322e9a347119ee47210a702e88be0261;hb=d4171bf0379c24a15df0281c5328c53087e446f4;hpb=d1f8e90ef5f123b11c58a143e8a786d9623ac4d7 diff --git a/http_send.c b/http_send.c index 0cab7420..6a4d24dd 100644 --- a/http_send.c +++ b/http_send.c @@ -197,6 +197,8 @@ static void http_post_select(fd_set *rfds, fd_set *wfds) struct http_client *hc, *tmp; const char *err_msg; + if (server_fd < 0) + return; list_for_each_entry_safe(hc, tmp, &clients, node) { i++; // PARA_DEBUG_LOG("handling client %d: %s\n", i, remote_name(hc->fd)); @@ -307,14 +309,13 @@ static void http_pre_select(int *max_fileno, fd_set *rfds, fd_set *wfds) } } -static int open_tcp_port(int port) +static int http_open(int port) { int ret; server_fd = para_listen(AF_UNSPEC, IPPROTO_TCP, port); if (server_fd < 0) { http_shutdown_clients(); - self->status = SENDER_OFF; return server_fd; } ret = mark_fd_nonblocking(server_fd); @@ -322,27 +323,26 @@ static int open_tcp_port(int port) PARA_EMERG_LOG("%s\n", para_strerror(-ret)); exit(EXIT_FAILURE); } - self->status = SENDER_ON; add_close_on_fork_list(server_fd); return 1; } static int http_com_on(__a_unused struct sender_command_data *scd) { - if (self->status == SENDER_ON) + if (server_fd >= 0) return 1; - return open_tcp_port(conf.http_port_arg); + return http_open(conf.http_port_arg); } static int http_com_off(__a_unused struct sender_command_data *scd) { - self->status = SENDER_OFF; - if (server_fd > 0) { - close(server_fd); - del_close_on_fork_list(server_fd); - server_fd = -1; - } + if (server_fd < 0) + return 1; + PARA_NOTICE_LOG("closing http port %d\n", conf.http_port_arg); + close(server_fd); + del_close_on_fork_list(server_fd); http_shutdown_clients(); + server_fd = -1; return 1; } @@ -382,7 +382,7 @@ static char *http_info(void) "http maximal number of clients: %d%s\n" "http connected clients: %s\n" "http access %s list: %s\n", - (self->status == SENDER_ON)? "on" : "off", + (server_fd >= 0)? "on" : "off", conf.http_port_arg, numclients, conf.http_max_clients_arg, @@ -431,6 +431,6 @@ void http_send_init(struct sender *s) self = s; acl_init(&http_acl, conf.http_access_arg, conf.http_access_given); if (!conf.http_no_autostart_given) - open_tcp_port(conf.http_port_arg); /* ignore errors */ + http_open(conf.http_port_arg); /* ignore errors */ PARA_DEBUG_LOG("%s", "http sender init complete\n"); }