ustd/ustcomm: allow to choose custom socket path
authorPierre-Marc Fournier <pierre-marc.fournier@polymtl.ca>
Wed, 9 Sep 2009 15:51:42 +0000 (11:51 -0400)
committerPierre-Marc Fournier <pierre-marc.fournier@polymtl.ca>
Wed, 9 Sep 2009 15:51:42 +0000 (11:51 -0400)
This is chosen with the -s option of ustd and, in the traced app,
with the UST_DAEMON_SOCKET environment variable.

libustcomm/ustcomm.c
libustcomm/ustcomm.h
ustd/ustd.c

index 630f90609cb403ec136f8120edb8b85c171f99ee..1f4bce95cbc4a7f726c1d612ca28e5cb130d42d2 100644 (file)
@@ -109,8 +109,18 @@ int ustcomm_request_consumer(pid_t pid, const char *channel)
        char *msg=NULL;
        int retval = 0;
        struct ustcomm_connection conn;
+       char *explicit_daemon_socket_path;
+
+       explicit_daemon_socket_path = getenv("UST_DAEMON_SOCKET");
+       if(explicit_daemon_socket_path) {
+               /* user specified explicitly a socket path */
+               result = snprintf(path, UNIX_PATH_MAX, "%s", explicit_daemon_socket_path);
+       }
+       else {
+               /* just use the default path */
+               result = snprintf(path, UNIX_PATH_MAX, "%s/ustd", SOCK_DIR);
+       }
 
-       result = snprintf(path, UNIX_PATH_MAX, "%s/ustd", SOCK_DIR);
        if(result >= UNIX_PATH_MAX) {
                ERR("string overflow allocating socket name");
                return -1;
@@ -485,31 +495,31 @@ free_name:
  * can connect to it.
  */
 
-int ustcomm_init_ustd(struct ustcomm_ustd *handle)
+int ustcomm_init_ustd(struct ustcomm_ustd *handle, const char *sock_path)
 {
-       int result;
        char *name;
+       int retval = 0;
 
-       result = asprintf(&name, "%s/%s", SOCK_DIR, "ustd");
-       if(result >= UNIX_PATH_MAX) {
-               ERR("string overflow allocating socket name");
-               return -1;
+       if(sock_path) {
+               asprintf(&name, "%s", sock_path);
+       }
+       else {
+               asprintf(&name, "%s/%s", SOCK_DIR, "ustd");
        }
 
        handle->server.listen_fd = init_named_socket(name, &handle->server.socketpath);
        if(handle->server.listen_fd < 0) {
                ERR("error initializing named socket at %s", name);
+               retval = -1;
                goto free_name;
        }
-       free(name);
 
        INIT_LIST_HEAD(&handle->server.connections);
 
-       return 0;
-
 free_name:
        free(name);
-       return -1;
+
+       return retval;
 }
 
 static char *find_tok(char *str)
index 83d8fae582d17be7e7090560547492cab2d5bdbc..76209406baecc7abbb6c253aca7f875a58ca679e 100644 (file)
@@ -64,7 +64,7 @@ extern int ustcomm_app_recv_message(struct ustcomm_app *app, char **msg, struct
 
 extern int ustcomm_init_app(pid_t pid, struct ustcomm_app *handle);
 
-extern int ustcomm_init_ustd(struct ustcomm_ustd *handle);
+extern int ustcomm_init_ustd(struct ustcomm_ustd *handle, const char *sock_path);
 
 extern int ustcomm_connect_app(pid_t pid, struct ustcomm_connection *conn);
 extern int ustcomm_connect_path(const char *path, struct ustcomm_connection *conn, pid_t signalpid);
index 5b45b6c812b94263d92ce81b8f4a8a06a81b70f3..a70f2f70a209f3436864ed50efac25275ab20000 100644 (file)
@@ -47,6 +47,8 @@
 #define PUT_SUBBUF_DIED 0
 #define PUT_SUBBUF_PUSHED 2
 
+char *sock_path=NULL;
 int test_sigpipe(void)
 {
        sigset_t sigset;
This page took 0.025411 seconds and 4 git commands to generate.