diff options
-rw-r--r-- | src/udscs.c | 6 | ||||
-rw-r--r-- | src/vdagent.c | 31 |
2 files changed, 25 insertions, 12 deletions
diff --git a/src/udscs.c b/src/udscs.c index c451855..6f1328e 100644 --- a/src/udscs.c +++ b/src/udscs.c @@ -182,8 +182,10 @@ struct udscs_connection *udscs_connect(const char *socketname, snprintf(address.sun_path, sizeof(address.sun_path), "%s", socketname); c = connect(conn->fd, (struct sockaddr *)&address, sizeof(address)); if (c != 0) { - fprintf(conn->errfile, "connect %s: %s\n", socketname, - strerror(errno)); + if (conn->logfile) { + fprintf(conn->logfile, "connect %s: %s\n", socketname, + strerror(errno)); + } free(conn); return NULL; } diff --git a/src/vdagent.c b/src/vdagent.c index 3569cdb..2b69865 100644 --- a/src/vdagent.c +++ b/src/vdagent.c @@ -76,6 +76,20 @@ void daemon_read_complete(struct udscs_connection **connp, } } +int client_setup(int reconnect) +{ + while (1) { + client = udscs_connect(VDAGENTD_SOCKET, daemon_read_complete, NULL, + vdagentd_messages, VDAGENTD_NO_MESSAGES, + verbose ? logfile : NULL, logfile); + if (client || !reconnect) { + break; + } + sleep(1); + } + return client == NULL; +} + static void usage(FILE *fp) { fprintf(fp, @@ -168,21 +182,16 @@ int main(int argc, char *argv[]) if (do_daemonize) daemonize(); - client = udscs_connect(VDAGENTD_SOCKET, daemon_read_complete, NULL, - vdagentd_messages, VDAGENTD_NO_MESSAGES, - verbose? logfile:NULL, logfile); - if (!client) { - if (logfile != stderr) - fclose(logfile); - return 1; + if (client_setup(do_daemonize)) { + retval = 1; + goto finish; } x11 = vdagent_x11_create(client, logfile, verbose); if (!x11) { udscs_destroy_connection(&client); - if (logfile != stderr) - fclose(logfile); - return 1; + retval = 1; + goto finish; } while (client && !quit) { @@ -212,6 +221,8 @@ int main(int argc, char *argv[]) vdagent_x11_destroy(x11); udscs_destroy_connection(&client); + +finish: if (logfile != stderr) fclose(logfile); |