immediately create listener thread on process creation
[ust.git] / libustcomm / ustcomm.c
index 6e93a0266bc9c7dd68c933fd330b60c6b6f62217..1b6843bf7d4879df38a57c946bd095d5cfd29f22 100644 (file)
@@ -67,29 +67,18 @@ char *strdup_malloc(const char *s)
 
 static int signal_process(pid_t pid)
 {
-       int result;
-
-       result = kill(pid, UST_SIGNAL);
-       if(result == -1) {
-               PERROR("kill");
-               return -1;
-       }
-
-       /* FIXME: should wait in a better way */
-       //sleep(1);
-
        return 0;
 }
 
 int pid_is_online(pid_t pid) {
-       return kill(pid, UST_SIGNAL) != -1;
+       return 1;
 }
 
 static int send_message_fd(int fd, const char *msg)
 {
        int result;
 
-       result = send(fd, msg, strlen(msg), 0);
+       result = send(fd, msg, strlen(msg), MSG_NOSIGNAL);
        if(result == -1) {
                PERROR("send");
                return -1;
@@ -390,13 +379,24 @@ static int init_named_socket(const char *name, char **path_out)
        return -1;
 }
 
+/*
+ * Return value:
+ *   0: Success, but no reply because recv() returned 0
+ *   1: Success
+ *   -1: Error
+ *
+ * On error, the error message is printed, except on
+ * ECONNRESET, which is normal when the application dies.
+ */
+
 int ustcomm_send_request(struct ustcomm_connection *conn, const char *req, char **reply)
 {
        int result;
 
-       result = send(conn->fd, req, strlen(req), 0);
+       result = send(conn->fd, req, strlen(req), MSG_NOSIGNAL);
        if(result == -1) {
-               PERROR("send");
+               if(errno != EPIPE)
+                       PERROR("send");
                return -1;
        }
 
@@ -406,7 +406,8 @@ int ustcomm_send_request(struct ustcomm_connection *conn, const char *req, char
        *reply = (char *) malloc(MSG_MAX+1);
        result = recv(conn->fd, *reply, MSG_MAX, 0);
        if(result == -1) {
-               PERROR("recv");
+               if(errno != ECONNRESET)
+                       PERROR("recv");
                return -1;
        }
        else if(result == 0) {
@@ -494,7 +495,7 @@ int ustcomm_init_app(pid_t pid, struct ustcomm_app *handle)
 
        handle->server.listen_fd = init_named_socket(name, &(handle->server.socketpath));
        if(handle->server.listen_fd < 0) {
-               ERR("error initializing named socket");
+               ERR("Error initializing named socket (%s). Check that directory exists and that it is writable.", name);
                goto free_name;
        }
        free(name);
This page took 0.023428 seconds and 4 git commands to generate.