src/server/daemon/webserver.c

branch
srvctrl
changeset 158
77f4f0079428
parent 156
724e107983e9
child 179
ef6827505bd2
--- a/src/server/daemon/webserver.c	Tue Jan 24 22:48:14 2017 +0100
+++ b/src/server/daemon/webserver.c	Wed Jan 25 11:50:19 2017 +0100
@@ -59,13 +59,12 @@
 #include "webserver.h"
 #include "log.h"
 #include "auth.h"
+#include "srvctrl.h"
 
 extern struct FuncStruct webserver_funcs[];
 
 static RestartCallback *atrestart;
 
-static int srvctrl;
-
 int webserver_init() { 
     // init NSPR
     systhread_init("webserver");
@@ -198,51 +197,9 @@
     
     // create srvctrl unix domain socket
     // this socket is used for stop, reconfigure and other operations
-    sstr_t uds_path = ucx_sprintf("%s/private/srvctrl.sock", cfg->tmp.ptr);
-    struct sockaddr_un addr;
-    if(uds_path.length > sizeof(addr.sun_path)-1) {
-        log_ereport(
-                LOG_CATASTROPHE,
-                "path '%s' too long for unix domain socket",
-                uds_path.ptr);
+    if(srvctrl_init(cfg)) {
         return -1;
-    }
-    
-    // make sure there is no old srvctrl socket file
-    // otherweise bind would fail
-    if(unlink(uds_path.ptr)) {
-        if(errno != ENOENT) {
-            log_ereport(
-                    LOG_CATASTROPHE,
-                    "cannot unlink old srvctrl socket '%s': %s",
-                    uds_path.ptr,
-                    strerror(errno));
-            return -1;
-        }
-    }
-
-    ZERO(&addr, sizeof(addr));
-    addr.sun_family = AF_UNIX;
-    memcpy(addr.sun_path, uds_path.ptr, uds_path.length);
-    
-    srvctrl = socket(AF_UNIX, SOCK_STREAM, 0);
-    if(srvctrl == -1) {
-        log_ereport(
-                LOG_CATASTROPHE,
-                "Cannot create server control socket: %s",
-                strerror(errno));
-        return -1;
-    }
-    if(bind(srvctrl, (struct sockaddr*)&addr, sizeof(addr))) {
-        log_ereport(
-                LOG_CATASTROPHE,
-                "srvctrl socket bind failed: %s",
-                strerror(errno));
-        return -1;
-    }
-    
-    free(uds_path.ptr);
-    
+    }    
     
     //endpwent(); // TODO: close or not?
     //free(pwbuf); // TODO: ?
@@ -266,6 +223,8 @@
 void webserver_shutdown() {
     log_ereport(LOG_INFORM, "webserver shutdown");
     
+    srvctrl_shutdown();
+    
     // execute restart callbacks
     RestartCallback *re = atrestart;
     while(re) {
@@ -274,8 +233,14 @@
     }
 }
 
-int webserver_srvctrl_fd() {
-    return srvctrl;
+int webserver_reconfig() {
+    if(cfgmgr_load_config(NULL) != 0) {
+        return -1;
+    }
+    // start newly created listeners
+    start_all_listener();
+    
+    return 0;
 }
 
 void webserver_atrestart(void (*fn)(void *), void *data) {

mercurial