From: oetiker Date: Sun, 4 Oct 2009 11:36:20 +0000 (+0000) Subject: rrd_client: Improved error handling / reporting. X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=0378d30e4a6f1a097f1285947f15dc7eb06294de;p=rrdtool-all.git rrd_client: Improved error handling / reporting. * Report getaddrinfo() errors using gai_strerror(). * Replaced "Internal error" with a more verbose error message, if available. -- Sebastian Harl git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk@1929 a5681a0c-68f1-0310-ab6d-d61299d08faa --- diff --git a/program/src/rrd_client.c b/program/src/rrd_client.c index 013b7e35..287f642d 100644 --- a/program/src/rrd_client.c +++ b/program/src/rrd_client.c @@ -452,7 +452,12 @@ static int rrdc_connect_network (const char *addr_orig) /* {{{ */ port == NULL ? RRDCACHED_DEFAULT_PORT : port, &ai_hints, &ai_res); if (status != 0) - return (status); + { + rrd_set_error ("failed to resolve address `%s' (port %s): %s", + addr, port == NULL ? RRDCACHED_DEFAULT_PORT : port, + gai_strerror (status)); + return (-1); + } for (ai_ptr = ai_res; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { @@ -510,6 +515,7 @@ int rrdc_connect (const char *addr) /* {{{ */ close_connection(); } + rrd_clear_error (); if (strncmp ("unix:", addr, strlen ("unix:")) == 0) status = rrdc_connect_unix (addr + strlen ("unix:")); else if (addr[0] == '/') @@ -520,10 +526,18 @@ int rrdc_connect (const char *addr) /* {{{ */ if (status == 0 && sd >= 0) sd_path = strdup(addr); else + { + char *err = rrd_test_error () ? rrd_get_error () : "Internal error"; + /* err points the string that gets written to by rrd_set_error(), thus we + * cannot pass it to that function */ + err = strdup (err); rrd_set_error("Unable to connect to rrdcached: %s", (status < 0) - ? "Internal error" + ? (err ? err : "Internal error") : rrd_strerror (status)); + if (err != NULL) + free (err); + } pthread_mutex_unlock (&lock); return (status);