#include "tincctl.h"
#include "top.h"
+#ifndef MSG_NOSIGNAL
+#define MSG_NOSIGNAL 0
+#endif
+
static char **orig_argv;
static int orig_argc;
blen++;
while(blen) {
- int result = send(fd, p, blen, 0);
+ int result = send(fd, p, blen, MSG_NOSIGNAL);
if(result == -1 && errno == EINTR)
continue;
else if(result <= 0)
freeaddrinfo(res);
#endif
+#ifdef SO_NOSIGPIPE
+ static const int one = 1;
+ setsockopt(c, SOL_SOCKET, SO_NOSIGPIPE, (void *)&one, sizeof one);
+#endif
+
char data[4096];
int version;
static const char *punit = "pkts";
static float pscale = 1;
-static void update(int fd) {
- sendline(fd, "%d %d", CONTROL, REQ_DUMP_TRAFFIC);
+static bool update(int fd) {
+ if(!sendline(fd, "%d %d", CONTROL, REQ_DUMP_TRAFFIC))
+ return false;
+
gettimeofday(&cur, NULL);
timersub(&cur, &prev, &diff);
int n = sscanf(line, "%d %d %s %"PRIu64" %"PRIu64" %"PRIu64" %"PRIu64, &code, &req, name, &in_packets, &in_bytes, &out_packets, &out_bytes);
if(n == 2)
- break;
+ return true;
- if(n != 7) {
- endwin();
- fprintf(stderr, "Error receiving traffic information\n");
- exit(1);
- }
+ if(n != 7)
+ return false;
nodestats_t *found = NULL;
found->out_packets = out_packets;
found->out_bytes = out_bytes;
}
+
+ return false;
}
static int cmpfloat(float a, float b) {
bool running = true;
while(running) {
- update(fd);
+ if(!update(fd))
+ break;
+
redraw();
switch(getch()) {