iptables plugin: Adds a plugin to collect iptables'-counters.
[collectd.git] / src / collectd.c
index 98b9a16..a93cc28 100644 (file)
@@ -193,7 +193,7 @@ static int start_client (void)
                curtime = time (NULL);
 
                /* Issue all plugins */
-               plugin_read_all ();
+               plugin_read_all (&loop);
 
                if (gettimeofday (&tv_now, NULL) < 0)
                {
@@ -207,7 +207,7 @@ static int start_client (void)
                        continue;
                }
 
-               while (nanosleep (&ts_wait, &ts_wait) == -1)
+               while ((loop == 0) && (nanosleep (&ts_wait, &ts_wait) == -1))
                {
                        if (errno != EINTR)
                        {
@@ -223,16 +223,27 @@ static int start_client (void)
 #if HAVE_LIBRRD
 static int start_server (void)
 {
-       /* FIXME use stack here! */
        char *host;
        char *type;
        char *instance;
        char *values;
 
-       while (loop == 0)
+       int  error_counter = 0;
+       int  status;
+
+       while ((loop == 0) && (error_counter < 3))
        {
-               if (network_receive (&host, &type, &instance, &values) == 0)
-                       plugin_write (host, type, instance, values);
+               status = network_receive (&host, &type, &instance, &values);
+
+               if (status != 0)
+               {
+                       if (status < 0)
+                               error_counter++;
+                       continue;
+               }
+               error_counter = 0;
+
+               plugin_write (host, type, instance, values);
 
                if (host     != NULL) free (host);     host     = NULL;
                if (type     != NULL) free (type);     type     = NULL;
@@ -444,6 +455,8 @@ int main (int argc, char **argv)
 #endif
                start_client ();
 
+       plugin_shutdown_all ();
+
 #if COLLECT_DEBUG
        if (logfile != NULL)
                DBG_STOPFILE("debug file closed.");