+--------------------------------------------------------- */
static void daemonize()
{
- int fd = 0, daemon;
+ int fd = 0, daemon, nostdin;
const char *output;
pid_t pid;
daemon = 0;
output = NULL;
wrap_json_unpack(main_config, "{s?b s?s}", "daemon", &daemon, "output", &output);
+ nostdin = 0;
if (output) {
fd = open(output, O_WRONLY | O_APPEND | O_CREAT, 0640);
}
if (pid != 0)
_exit(0);
+
+ nostdin = 1;
}
/* closes the input */
close(fd);
}
- /* after that ctrl+C still works */
- close(0);
+ if (nostdin)
+ close(0); /* except if 'daemon', ctrl+C still works after that */
}
/*---------------------------------------------------------
if (traceglob)
afb_hook_create_global(afb_hook_flags_global_from_text(traceglob), NULL, NULL);
- /* load bindings */
+ /* load bindings and apis */
afb_debug("start-load");
apiset_start_list("binding", afb_api_so_add_binding, "the binding");
apiset_start_list("ldpaths", afb_api_so_add_pathset_fails, "the binding path set");
apiset_start_list("weak-ldpaths", afb_api_so_add_pathset_nofails, "the weak binding path set");
apiset_start_list("auto-api", afb_autoset_add_any, "the automatic api path set");
- apiset_start_list("ws-server", afb_api_ws_add_server, "the afb-websocket service");
#if defined(WITH_DBUS_TRANSPARENCY)
- apiset_start_list("dbus-server", afb_api_dbus_add_server, "the afb-dbus service");
apiset_start_list("dbus-client", afb_api_dbus_add_client, "the afb-dbus client");
#endif
apiset_start_list("ws-client", afb_api_ws_add_client_weak, "the afb-websocket client");
if (afb_apiset_start_all_services(main_apiset) < 0)
goto error;
+ /* export started apis */
+ apiset_start_list("ws-server", afb_api_ws_add_server, "the afb-websocket service");
+#if defined(WITH_DBUS_TRANSPARENCY)
+ apiset_start_list("dbus-server", afb_api_dbus_add_server, "the afb-dbus service");
+#endif
+
/* start the HTTP server */
afb_debug("start-http");
if (!no_httpd) {