diff options
author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2011-05-20 03:03:05 +0200 |
---|---|---|
committer | Hans de Goede <hdegoede@redhat.com> | 2011-07-15 10:21:28 +0200 |
commit | 5814222821a5e41e610633b73d6e739be7c4cbad (patch) | |
tree | c624d5213827a3ecbc89b8be26de98ee223a3e39 | |
parent | 0fca86d2dd18e41630ebbca444a696de458a69bd (diff) |
Attempt to reconnect to system socket every second when daemonized
https://bugzilla.redhat.com/show_bug.cgi?id=681797
-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); |