Code

frontend: Execute commands early on large amounts of incoming traffic.
[sysdb.git] / src / tools / sysdb / input.c
index f115e3e2a51088efdf2dec9e5547ffa1a60642cc..8d91048e35c5714fe7522f112aa5e736208b5a85 100644 (file)
@@ -47,6 +47,7 @@
 #include "tools/sysdb/input.h"
 #include "tools/sysdb/command.h"
 
+#include "utils/error.h"
 #include "utils/strbuf.h"
 
 #include <sys/select.h>
@@ -178,10 +179,18 @@ input_readline(void)
                if (! FD_ISSET(client_fd, &fds))
                        continue;
 
+               if (sdb_client_eof(sysdb_input->client)) {
+                       /* XXX: try to reconnect */
+                       printf("\n");
+                       sdb_log(SDB_LOG_ERR, "Remote side closed the connection.");
+                       /* return EOF */
+                       return 0;
+               }
+
                /* some response / error message from the server pending */
                /* XXX: clear current line */
                printf("\n");
-               sdb_command_print_reply(sysdb_input);
+               sdb_command_print_reply(sysdb_input->client);
                rl_forced_update_display();
        }
 
@@ -214,7 +223,7 @@ sdb_input_mainloop(void)
 } /* sdb_input_mainloop */
 
 ssize_t
-sdb_input_readline(char *buf, int *n_chars, size_t max_chars)
+sdb_input_readline(char *buf, size_t *n_chars, size_t max_chars)
 {
        const char *data;
        size_t len;